Vinculação de dados e exibindo dados usando um controle de ObjectList
Você pode usar o ObjectList Controle móvel do ASP.NET para fornecer uma exibição de dados versátil. Esse controle mostra dois modos de exibição de fonte de dados, um modo de exibição de lista que mostra um resumo de cada item e um modo de exibição que mostra detalhes do item.Você pode definir explicitamente os campos de lista que você deseja mostrar para cada item, ou você poderá gerá-los automaticamente da fonte de dados.Por padrão, o controle gera um campo para cada campo na fonte de dados na ordem em que ele aparece na fonte de dados.O nome de cada campo gerado automaticamente é usado sistema autônomo o título do campo.
Você pode BIND dados em um ObjectList o controle para um DataView ou um DataSet objeto. Para BIND dados em um ObjectList controle móvel para um DataView objeto, conjunto o DataSource propriedade e, em seguida, telefonar a DataBind método para executar vinculação de dados. Por exemplo, se você tiver um DataSet objeto com uma tabela chamada Titles, você pode usar as instruções a seguir para executar vinculação de dados:
myObjectList.DataSource = ds.Tables["Titles"].DefaultView;
myObjectList.DataBind();
Como alternativa, para BIND dados diretamente a um DataSet o objeto, além disso, você deve conjunto o DataMember propriedade para o nome da tabela. O exemplo a seguir é equivalente à anterior:
myObjectList.DataSource = ds;
myObjectList.DataMember = "Titles";
myObjectList.DataBind();
Você também pode conjunto um campo de item para um valor composto por várias das propriedades do item de dados.Para fazer isso, você pode substituir o ItemDataBind evento da ObjectList controle, e conjunto o campo programaticamente. O exemplo a seguir define o Summary campo a uma combinação do título e o preço de um livro:
private void ObjectList_OnItemDataBind(Object sender,
ObjectListDataBindEventArgs e)
{
e.ListItem["Summary"] = String.Format( String.Format ("{0} – {1}",
DataBinder.Eval(e.DataItem, "title"),
DataBinder.Eval (e.DataItem, "price")));
}
Além disso, você pode controle como cada item é processado no modo de exibição de lista.Por padrão, o modo de exibição de lista usa o primeiro campo para representar cada item.No entanto, você pode conjunto o LabelField propriedade para qualquer campo definido ou gerado automaticamente, inclusive uma que não estiver visível no modo de exibição detalhes. Usando o exemplo anterior, você pode usar o Summary campo sistema autônomo o rótulo de um item, enquanto ocultá-lo no modo de exibição detalhes.
Executar ligação dentro de um ObjectList de dados
An ObjectList controle mostra conteúdo somente se ele está limite a uma fonte de dados. A fonte de dados pode ser qualquer objeto que implementa o IEnumerable interface ou a IListSource interface. No entanto, cada objeto da fonte de dados deve ser da mesma classe, ou deve herdar da classe mesma comum.Quando o AutoGenerateFields é definido como true, os objetos em uma fonte de dados devem ser da mesma classe.
Para cada objeto na fonte de dados, a ObjectList construções de controlar um ObjectListItem instância e o armazena no seu Items coleção. Essa coleção pode ser inspecionada, mas não modificada pelo seu código.
Todas as propriedades da lista de objetos se refere a devem ser propriedades públicas de uma classe comuns a todos os objetos em uma fonte de dados.Todas as propriedades correspondentes aos campos também devem ser de um tipo de ligação.Tipos válido vinculáveis são String, DateTime, Decimale o conjunto de tipos primitivos.
Para cada objeto da fonte de dados, o controle executa as seguintes etapas de vinculação de dados:
Para cada campo, a ObjectList controle usa o campo DataField propriedade para determinar qual propriedade do objeto de dados para pesquisar. Cada valor é salvo no ObjectListItem instância sistema autônomo um valor do campo indexado.
Depois que todos os campos estão vinculados dessa forma, o controle chama qualquer ItemDataBind manipulador de eventos definido para o ObjectList controle. Você pode usar esse manipulador para fazer vinculação de dados mais complexa e para conjunto valores no ObjectListItem instância.
Observação: Algumas alterações um ObjectList controle requerem que você revincular os dados no controle. Essas alterações incluem a adição ou remoção de campos, alterando o DataField propriedade de um campo e alterando o DataFormatString propriedade de um campo.
Iniciar geração de campo automáticas durante vinculação de dados
Em vinculação de dados, se o AutoGenerateFields propriedade estiver definida como true, o ObjectList controle inspeciona a fonte de dados e, em seguida, gera automaticamente os campos. Se a fonte de dados for uma lista do tipo ITypedList, o ObjectList controle inspeciona as informações para o tipo. Caso contrário, a ObjectList controle inspeciona o tipo de informação do primeiro objeto na lista.
Para cada propriedade pública ligável do tipo inspecionado, a ObjectList controle gera um campo limite à propriedade. Isso ocorre durante a vinculação de dados; se você alterar um campo, ou adicionar ou remover campos, você deve BIND as propriedades novamente.
Por padrão, gerados automaticamente campos estarão visíveis, usarem a formatação padrão e eles têm o mesmo título sistema autônomo o nome de propriedade.Todos esses valores podem ser alterados por programação.Além disso, você pode especificar o título do campo, adicionando um ObjectListTitleAttribute o atributo da propriedade. Por exemplo, se o objeto tem uma propriedade declarada sistema autônomo [ObjectListTitle("Address")]myAddress, o campo gerado terá o título "Endereço".
Se o ObjectList controle explicitamente tiver definido campos, são adicionados campos gerados automaticamente após esses campos.
O exemplo a seguir mostra como exibir uma lista de objetos personalizados em um ObjectList controle.
<%@ Page Language="VB"
Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="mobile"
Namespace="System.Web.UI.MobileControls"
Assembly="System.Web.Mobile" %>
<script >
Private customers(3) As Person
Private Class Person
Private _Name, _Nickname, _Initials As String
Public Sub New(ByVal name As String, _
ByVal nickname As String, _
ByVal initials As String)
Me._Name = name
Me._Nickname = nickname
Me._Initials = initials
End Sub
Public ReadOnly Property Name() As String
Get
Return _Name
End Get
End Property
Public ReadOnly Property Nickname() As String
Get
Return _Nickname
End Get
End Property
Public ReadOnly Property Initials() As String
Get
Return _Initials
End Get
End Property
End Class
Private Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs)
ReDim customers(2)
customers(0) = _
New Person("George Washington", "George", "GW")
customers(1) = _
New Person("Abraham Lincoln", "Abe", "AL")
customers(2) = _
New Person("Theodore Roosevelt", "Teddy", "TR")
If (Not IsPostBack) Then
' Bind the array to the list.
List1.DataSource = customers
List1.DataTextField = "Name"
List1.DataBind()
End If
End Sub
Protected Sub List1_ItemCommand( _
ByVal sender As Object, _
ByVal e As ListCommandEventArgs)
' Show the Summary text
Dim selectedPerson As Person = _
customers(e.ListItem.Index)
Label1.Text = _
String.Format("{0} (AKA {1}), initials {2}", _
selectedPerson.Name, _
selectedPerson.Nickname, _
selectedPerson.Initials)
ActiveForm = Form2
End Sub
Protected Sub Command1_Click(ByVal sender As Object, _
ByVal e As EventArgs)
Me.ActiveForm = Me.Form1
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<mobile:form id="Form1" >
<mobile:List ID="List1" Runat="server"
OnItemCommand="List1_ItemCommand" />
</mobile:form>
<mobile:Form ID="Form2" Runat="server">
<mobile:Label ID="Label1" />
<mobile:Command ID="Command1" Runat="server"
StyleReference="subcommand"
OnClick="Command1_Click">
Return</mobile:Command>
</mobile:Form>
</body>
</html>
<%@ Page Language="C#"
Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="mobile"
Namespace="System.Web.UI.MobileControls"
Assembly="System.Web.Mobile" %>
<%@ Import Namespace="System.Collections" %>
<script >
private ArrayList customers = new ArrayList();
private class Person
{
private String _Name, _Nickname, _Initials;
public Person(String name, String nickname, String initials)
{
this._Name = name;
this._Nickname = nickname;
this._Initials = initials;
}
public String Name { get { return _Name; } }
public String Nickname { get { return _Nickname; } }
public String Initials { get { return _Initials; } }
}
private void Page_Load(object sender, System.EventArgs e)
{
customers.Add(
new Person("George Washington", "George", "GW"));
customers.Add(
new Person("Abraham Lincoln", "Abe", "AL"));
customers.Add(
new Person("Theodore Roosevelt", "Teddy", "TR"));
if(!IsPostBack)
{
// Bind the array to the list.
List1.DataSource = customers;
List1.DataTextField = "Name";
List1.DataBind();
}
}
private void List1_ItemCommand(object sender,
ListCommandEventArgs e)
{
Person selectedPerson = (Person)customers[e.ListItem.Index];
Label1.Text = String.Format("{0} (AKA {1}), initials {2}",
selectedPerson.Name, selectedPerson.Nickname,
selectedPerson.Initials);
ActiveForm = Form2;
}
protected void Command1_Click(object sender, EventArgs e)
{
this.ActiveForm = this.Form1;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<mobile:form id="Form1" >
<mobile:List ID="List1" Runat="server"
OnItemCommand="List1_ItemCommand">
</mobile:List>
</mobile:form>
<mobile:Form ID="Form2" Runat="server">
<mobile:Label ID="Label1" />
<mobile:Command ID="Command1" Runat="server"
OnClick="Command1_Click">Return</mobile:Command>
</mobile:Form>
</body>
</html>
Associando comandos em uma lista de objetos
The ObjectList controle permite que um conjunto de comandos a ser associado um item. Cada comando possui um Name propriedade usada para identificar exclusivamente o comando e um Text propriedade usada para processar o comando.
O controle fornece duas maneiras para definir comandos:
Declarativamente, usando <command> elementos-filho dentro de um ObjectList controle.
Através de programação, criando ObjectListCommand objetos e adicioná-los para o Commands coleção do controle.
Por padrão, todos os itens da lista compartilham o mesmo conjunto de comandos.No entanto, antes de processar o conjunto de comandos para um determinado item, o controle dispara o ShowItemCommands evento. Um evento manipulador pode usar esse método para modificar o conjunto de comandos visíveis para o item.
Quando o usuário seleciona um comando, um ItemCommand evento é gerado com informações sobre o item selecionado e o nome do comando selecionado.
Mesmo se você definir um comando padrão para um item, você deve incluir um comando com o mesmo nome no Commands coleção. Se o controle não é possível processar uma interface do usuário que inclui um atalho para o comando padrão, ele deve exibir o comando padrão sistema autônomo parte do conjunto de comandos.
Acessando os valores dos campos de um item de lista
Quando você associar um manipulador de eventos com um ObjectList controle, ele processa itens sistema autônomo elementos interativos. Clicando em um item em uma lista gera um evento que recupera a ação apropriada para esse item.Durante a vinculação de dados, cada campo é limite a sua propriedade correspondente.
Para recuperar um valor do campo de um ObjectListItem objeto, use a sintaxe a seguir, onde lstItem é um ObjectListItem instância:
lstItem[fieldName]
O exemplo a seguir é semelhante ao exemplo anterior, mas usa dois Command controles para cada registro e usa a sintaxe do campo para recuperar valores de campo:
<%@ Page Language="VB"
Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="mobile"
Namespace="System.Web.UI.MobileControls"
Assembly="System.Web.Mobile" %>
<%@ Import Namespace="System.Collections" %>
<script >
Public Class Person
' Private Fields
Private _Name, _Nickname, _Initials, _Wife As String
' Constructor
Public Sub New(ByVal name As String, _
ByVal nickname As String, ByVal initials As String, _
ByVal wife As String)
Me._Name = name
Me._Nickname = nickname
Me._Initials = initials
Me._Wife = wife
End Sub
' Public Properties
Public ReadOnly Property Name()
Get
Return _Name
End Get
End Property
Public ReadOnly Property Nickname()
Get
Return _Nickname
End Get
End Property
Public ReadOnly Property Initials()
Get
Return _Initials
End Get
End Property
Public ReadOnly Property Wife()
Get
Return _Wife
End Get
End Property
End Class
Private Sub Page_Load(ByVal sender As Object, _
ByVal e As EventArgs)
If Not IsPostBack Then
' An ArrayList for the Person objects
Dim customers As New ArrayList()
customers.Add( _
New Person("George Washington", "George", _
"GW", "Martha"))
customers.Add( _
New Person("Abraham Lincoln", "Abe", _
"AL", "Mary"))
customers.Add( _
New Person("Theodore Roosevelt", "Teddy", _
"TR", "Alice Lee"))
' Bind the array to the list.
ObjectList1.DataSource = customers
ObjectList1.LabelField = "Name"
ObjectList1.DataBind()
End If
End Sub
Protected Sub ObjectList1_ItemCommand( _
ByVal sender As Object, _
ByVal e As ObjectListCommandEventArgs)
If e.CommandName = "ShowSummary" Then
' Show the Summary text
Label1.Text = _
String.Format("{0}, AKA: '{1}', initials: '{2}'", _
e.ListItem("Name"), e.ListItem("Nickname"), _
e.ListItem("Initials"))
ElseIf e.CommandName = "MoreInfo" Then
' Show the More Info text
Label1.Text = String.Format("{0}'s wife was {1}", _
e.ListItem("Nickname"), e.ListItem("Wife"))
End If
Me.ActiveForm = Form2
End Sub
Protected Sub Command1_Click(ByVal sender As Object, _
ByVal e As EventArgs)
' Show the first form
Me.ActiveForm = Form1
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<mobile:form id="Form1" >
<mobile:ObjectList ID="ObjectList1" Runat="server"
CommandStyle-StyleReference="subcommand"
LabelStyle-StyleReference="title"
OnItemCommand="ObjectList1_ItemCommand">
<Command Name="ShowSummary" Text="Summary" />
<Command Name="MoreInfo" Text="More Info" />
</mobile:ObjectList>
</mobile:form>
<mobile:Form ID="Form2" Runat="server">
<mobile:Label ID="Label1" />
<mobile:Command ID="Command1" Runat="server"
OnClick="Command1_Click">Return
</mobile:Command>
</mobile:Form>
</body>
</html>
<%@ Page Language="C#"
Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="mobile"
Namespace="System.Web.UI.MobileControls"
Assembly="System.Web.Mobile" %>
<%@ Import Namespace="System.Collections" %>
<script >
private class Person
{
// Private Fields
private String _Name, _Nickname, _Initials, _Wife;
// Constructor
public Person(string name, string nickname,
string initials, string wife)
{
this._Name = name;
this._Nickname = nickname;
this._Initials = initials;
this._Wife = wife;
}
// Public Properties
public String Name { get { return _Name; } }
public String Nickname { get { return _Nickname; } }
public String Initials { get { return _Initials; } }
public String Wife { get { return _Wife; } }
}
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
// An ArrayList for the Person objects
ArrayList customers = new ArrayList();
// Fill the Person object
customers.Add(
new Person("George Washington", "George",
"GW", "Martha"));
customers.Add(
new Person("Abraham Lincoln", "Abe",
"AL", "Mary"));
customers.Add(
new Person("Theodore Roosevelt", "Teddy",
"TR", "Alice Lee"));
// Bind the array to the list.
ObjectList1.DataSource = customers;
ObjectList1.LabelField = "Name";
ObjectList1.DataBind();
}
}
protected void ObjectList1_ItemCommand
(object sender, ObjectListCommandEventArgs e)
{
if (e.CommandName == "ShowSummary")
{
// Show the Summary text
Label1.Text =
String.Format("{0}, AKA: '{1}', initials: '{2}'",
e.ListItem["Name"], e.ListItem["Nickname"],
e.ListItem["Initials"]);
}
else if (e.CommandName == "MoreInfo")
{
// Show the More Info text
Label1.Text = String.Format("{0}'s wife was {1}",
e.ListItem["Nickname"], e.ListItem["Wife"]);
}
this.ActiveForm = Form2;
}
protected void Command1_Click(object sender, EventArgs e)
{
// Show the first form
this.ActiveForm = Form1;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<mobile:form id="Form1" >
<mobile:ObjectList ID="ObjectList1" Runat="server"
CommandStyle-StyleReference="subcommand"
LabelStyle-StyleReference="title"
OnItemCommand="ObjectList1_ItemCommand">
<Command Name="ShowSummary" Text="Summary" />
<Command Name="MoreInfo" Text="More Info" />
</mobile:ObjectList>
</mobile:form>
<mobile:Form ID="Form2" Runat="server">
<mobile:Label ID="Label1" />
<mobile:Command ID="Command1" Runat="server"
OnClick="Command1_Click">Return
</mobile:Command>
</mobile:Form>
</body>
</html>
vinculação de dados no ObjectList modelos
No ObjectList controle, você pode definir modelos para personalizar a experiência do usuário. Se você estiver fazendo vinculação de dados embutidos nos modelos, use a seguinte sintaxe:
<%#((ObjectListItem)Container)["BookName"]%>
Você também pode usar o DataBinder.Eval método para BIND dados em todos sistema autônomo modelos, sistema autônomo no exemplo a seguir:
<%#DataBinder.Eval(((ObjectListItem)Container).DataItem,"fieldname")%>