DataGrid-Klasse
Ein datengebundenes Listensteuerelement, das die Elemente aus einer Datenquelle in einer Tabelle anzeigt. Mit dem DataGrid-Steuerelement können Sie diese Elemente auswählen, sortieren und bearbeiten.
Namespace: System.Web.UI.WebControls
Assembly: System.Web (in system.web.dll)
Syntax
'Declaration
Public Class DataGrid
Inherits BaseDataList
Implements INamingContainer
'Usage
Dim instance As DataGrid
public class DataGrid : BaseDataList, INamingContainer
public ref class DataGrid : public BaseDataList, INamingContainer
public class DataGrid extends BaseDataList implements INamingContainer
public class DataGrid extends BaseDataList implements INamingContainer
Hinweise
Verwenden Sie das DataGrid-Steuerelement, um die Felder einer Datenquelle als Spalten in einer Tabelle anzuzeigen. Jede Zeile im DataGrid-Steuerelement stellt einen Datensatz in der Datenquelle dar. Das DataGrid-Steuerelement unterstützt das Auswählen, Bearbeiten, Löschen, Paginieren und Sortieren.
Unterschiedliche Spaltentypen bestimmen das Verhalten der Spalten im Steuerelement. In der folgenden Tabelle werden die verschiedenen Spaltentypen aufgelistet, die verwendet werden können.
Spaltentyp |
Beschreibung |
---|---|
Zeigt eine Spalte an, die an ein Feld in einer Datenquelle gebunden ist. Jedes Element in diesem Feld wird als Text angezeigt. Dies ist der Standardspaltentyp des DataGrid-Steuerelements. |
|
Zeigt eine Befehlsschaltfläche für jedes Element in der Spalte an. Damit können Sie eine Spalte mit benutzerdefinierten Schaltflächen-Steuerelementen erstellen, z. B. die Schaltflächen Add und Remove. |
|
Zeigt eine Spalte an, die Bearbeitungsbefehle für jedes Element in der Spalte enthält. |
|
Zeigt den Inhalt der einzelnen Elemente in der Spalte als Hyperlink an. Der Inhalt der Spalte kann an ein Feld in einer Datenquelle oder an statischen Text gebunden werden. |
|
Zeigt jedes Element in der Spalte entsprechend einer angegebenen Vorlage an. Dadurch können Sie benutzerdefinierte Steuerelemente in der Spalte bereitstellen. |
Standardmäßig ist die AutoGenerateColumns-Eigenschaft auf true festgelegt, wodurch ein BoundColumn-Objekt für jedes Feld in der Datenquelle erstellt wird. Die einzelnen Felder werden anschließend in der Reihenfolge, in der sie in der Datenquelle enthalten sind, als Spalte im DataGrid-Steuerelement dargestellt.
Sie können darüber hinaus manuell festlegen, welche Spalten im DataGrid-Steuerelement angezeigt werden, indem Sie die AutoGenerateColumns-Eigenschaft auf false festlegen und anschließend zwischen dem öffnenden und dem schließenden <Columns>-Tag die anzuzeigenden Spalten auflisten. Die angegebenen Spalten werden in der Reihenfolge, in der sie aufgeführt sind, der Columns-Auflistung hinzugefügt. Dadurch können Sie die Spalten im DataGrid-Steuerelement programmgesteuert steuern.
Hinweis
Die Reihenfolge, in der die Spalten im DataGrid-Steuerelement angezeigt werden, wird durch die Reihenfolge bestimmt, in der die Spalten in der Columns-Auflistung aufgeführt sind. Obwohl Sie die Reihenfolge der Spalten programmgesteuert ändern können, indem Sie die Columns-Auflistung bearbeiten, ist es einfacher, die Spalten in der gewünschten Anzeigereihenfolge aufzulisten.
Explizit deklarierte Spalten können zusammen mit automatisch erstellten Spalten angezeigt werden. Wenn Sie beide Spaltenarten verwenden, werden explizit deklarierte Spalten zuerst und anschließend die automatisch erstellten Spalten dargestellt.
Hinweis
Automatisch generierte Spalten werden der Columns-Auflistung nicht hinzugefügt.
Die Darstellung des DataGrid-Steuerelements kann durch Festlegen der Stileigenschaften für die unterschiedlichen Teile des Steuerelements angepasst werden. In der folgenden Tabelle sind die verschiedenen Stileigenschaften aufgelistet.
Stileigenschaft |
Beschreibung |
---|---|
Gibt den Stil für abwechselnde Elemente im DataGrid-Steuerelement an. |
|
Gibt den Stil für das im DataGrid-Steuerelement bearbeitete Element an. |
|
Gibt den Stil für den Footerzeilenbereich im DataGrid-Steuerelement an. |
|
Gibt den Stil für den Headerzeilenbereich im DataGrid-Steuerelement an. |
|
Gibt den Stil für die Elemente im DataGrid-Steuerelement an. |
|
Gibt den Stil für den Seitenauswahlbereich des DataGrid-Steuerelements an. |
|
Gibt den Stil für das im DataGrid-Steuerelement ausgewählte Element an. |
Sie können auch verschiedene Bereiche des Steuerelements anzeigen und ausblenden. In der folgenden Tabelle sind die Eigenschaften aufgeführt, mit denen gesteuert wird, welche Bereiche angezeigt oder ausgeblendet werden.
Eigenschaft |
Beschreibung |
---|---|
Zeigt den Footerzeilenbereich des DataGrid-Steuerelements an oder blendet diesen aus. |
|
Zeigt den Headerzeilenbereich des DataGrid-Steuerelements an oder blendet diesen aus. |
Sie können die Darstellung des DataGrid-Steuerelements festlegen, indem Sie dem <td>-Tag und dem <tr>-Tag, die vom Steuerelement im Browser dargestellt werden, programmgesteuert Attribute hinzufügen. Attribute können programmgesteuert hinzugefügt werden, indem Sie im Ereignishandler für das OnItemCreated-Ereignis oder das OnItemDataBound-Ereignis Code bereitstellen.
Um dem <td>-Tag ein Attribut hinzuzufügen, rufen Sie zuerst das TableCell-Objekt ab, das die Zelle in dem DataGrid-Steuerelement darstellt, dem das Attribut hinzugefügt werden soll. Mit der Control.Controls-Auflistung für die Item-Eigenschaft des in den Ereignishandler übergebenen DataGridItemEventArgs-Objekts kann das gewünschte TableCell-Objekt abgerufen werden. Anschließend können Sie mit der AttributeCollection.Add-Methode der Attributes-Auflistung für das TableCell-Objekt dem <td>-Tag Attribute hinzufügen.
Um dem <tr>-Tag ein Attribut hinzuzufügen, rufen Sie zuerst das DataGridItem-Objekt ab, das die Zeile in dem DataGrid-Steuerelement darstellt, dem das Attribut hinzugefügt werden soll. Mit der Item-Eigenschaft des in den Ereignishandler übergebenen DataGridItemEventArgs-Objekts kann das gewünschte DataGridItem-Objekt abgerufen werden. Anschließend können Sie mit der AttributeCollection.Add-Methode der Attributes-Auflistung für das DataGridItem-Objekt dem <tr>-Tag Attribute hinzufügen.
Warnung
Dieses Steuerelement kann zum Anzeigen von Benutzereingaben verwendet werden, die möglicherweise böswillige Clientskripts enthalten. Überprüfen Sie alle Informationen, die von einem Client gesendet werden, nach ausführbaren Skripts, SQL-Anweisungen oder anderem Code, bevor Sie sie in der Anwendung anzeigen. ASP.NET stellt ein Feature zur Anfragevalidierung von Eingaben bereit, um Skripts und HTML in Benutzereingaben zu blockieren. Serversteuerelemente für die Validierung werden ebenfalls bereitgestellt, um Benutzereingaben zu bewerten. Weitere Informationen finden Sie unter Syntax von Validierungs-Serversteuerelementen.
Eingabehilfen
Das für dieses Steuerelement standardmäßig wiedergegebene Markup entspricht eventuell nicht den Standards für die Eingabehilfen wie beispielsweise den Richtlinien der Web Content Accessibility Guidelines 1.0 (WCAG) mit der Priorität 1. Details über die Unterstützung von Eingabehilfen für dieses Steuerelement finden Sie unter Steuerelemente und Eingabehilfen von ASP.NET.
Beispiel
Das folgende Codebeispiel veranschaulicht, wie mit dem DataGrid-Steuerelement die Elemente in der Datenquelle angezeigt werden können.
<%@ Page Language="VB" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<html>
<script language="VB" runat="server">
Function CreateDataSource() As ICollection
Dim dt As New DataTable()
Dim dr As DataRow
dt.Columns.Add(New DataColumn("IntegerValue", GetType(Int32)))
dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn("CurrencyValue", GetType(Double)))
Dim i As Integer
For i = 0 To 8
dr = dt.NewRow()
dr(0) = i
dr(1) = "Item " + i.ToString()
dr(2) = 1.23 *(i + 1)
dt.Rows.Add(dr)
Next i
Dim dv As New DataView(dt)
Return dv
End Function 'CreateDataSource
Sub Page_Load(sender As Object, e As EventArgs)
If Not IsPostBack Then
' Load this data only once.
ItemsGrid.DataSource = CreateDataSource()
ItemsGrid.DataBind()
End If
End Sub 'Page_Load
</script>
<body>
<form runat=server>
<h3>DataGrid Example</h3>
<b>Product List</b>
<asp:DataGrid id="ItemsGrid"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
AutoGenerateColumns="true"
runat="server">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
</asp:DataGrid>
</form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<html>
<script language="C#" runat="server">
ICollection CreateDataSource()
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
for (int i = 0; i < 9; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = "Item " + i.ToString();
dr[2] = 1.23 * (i + 1);
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
void Page_Load(Object sender, EventArgs e)
{
if (!IsPostBack)
{
// Load this data only once.
ItemsGrid.DataSource= CreateDataSource();
ItemsGrid.DataBind();
}
}
</script>
<body>
<form runat=server>
<h3>DataGrid Example</h3>
<b>Product List</b>
<asp:DataGrid id="ItemsGrid"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
AutoGenerateColumns="true"
runat="server">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
</asp:DataGrid>
</form>
</body>
</html>
Im folgenden Codebeispiel wird die Verwendung des DataGrid-Steuerelements für einen einfachen Warenkorb veranschaulicht.
<%@ Page Language="VB" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<html>
<script language="VB" runat="server">
Dim Cart As DataTable
Dim CartView As DataView
Function CreateDataSource() As ICollection
Dim dt As New DataTable()
Dim dr As DataRow
dt.Columns.Add(New DataColumn("IntegerValue", GetType(Int32)))
dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn("CurrencyValue", GetType(Double)))
Dim i As Integer
For i = 0 To 8
dr = dt.NewRow()
dr(0) = i
dr(1) = "Item " + i.ToString()
dr(2) = 1.23 *(i + 1)
dt.Rows.Add(dr)
Next i
Dim dv As New DataView(dt)
Return dv
End Function 'CreateDataSource
Sub Page_Load(sender As Object, e As EventArgs)
If Session("DG4_ShoppingCart") Is Nothing Then
Cart = New DataTable()
Cart.Columns.Add(New DataColumn("Item", GetType(String)))
Cart.Columns.Add(New DataColumn("Price", GetType(String)))
Session("DG4_ShoppingCart") = Cart
Else
Cart = CType(Session("DG4_ShoppingCart"), DataTable)
End If
CartView = New DataView(Cart)
ShoppingCart.DataSource = CartView
ShoppingCart.DataBind()
If Not IsPostBack Then
' Load this data only once.
ItemsGrid.DataSource = CreateDataSource()
ItemsGrid.DataBind()
End If
End Sub 'Page_Load
Sub Grid_CartCommand(sender As Object, e As DataGridCommandEventArgs)
Dim dr As DataRow = Cart.NewRow()
' e.Item is the table row where the command is raised.
' For bound columns, the value is stored in the Text property of the TableCell.
Dim itemCell As TableCell = e.Item.Cells(2)
Dim priceCell As TableCell = e.Item.Cells(3)
Dim item As String = itemCell.Text
Dim price As String = priceCell.Text
If CType(e.CommandSource, Button).CommandName = "AddToCart" Then
dr(0) = item
dr(1) = price
Cart.Rows.Add(dr)
Else
'Remove from Cart.
CartView.RowFilter = "Item" + ChrW(61) + "'" + item + "'"
If CartView.Count > 0 Then
CartView.Delete(0)
End If
CartView.RowFilter = ""
End If
ShoppingCart.DataBind()
End Sub 'Grid_CartCommand
</script>
<body>
<form runat=server>
<h3>DataGrid Example</h3>
<table cellpadding="5">
<tr valign="top">
<td>
<b>Product List</b>
<asp:DataGrid id="ItemsGrid"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
AutoGenerateColumns="false"
OnItemCommand="Grid_CartCommand"
runat="server">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
<Columns>
<asp:ButtonColumn
HeaderText="Add to cart"
ButtonType="PushButton"
Text="Add"
CommandName="AddToCart" />
<asp:ButtonColumn
HeaderText="Remove from cart"
ButtonType="PushButton"
Text="Remove"
CommandName="RemoveFromCart" />
<asp:BoundColumn
HeaderText="Item"
DataField="StringValue"/>
<asp:BoundColumn
HeaderText="Price"
DataField="CurrencyValue"
DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="right">
</ItemStyle>
</asp:BoundColumn>
</Columns>
</asp:DataGrid>
</td>
<td>
<b>Shopping Cart</b>
<asp:DataGrid id="ShoppingCart"
runat="server"
BorderColor="black"
BorderWidth="1"
GridLines="Both"
ShowFooter="false"
CellPadding="3"
CellSpacing="0">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
</asp:DataGrid>
</td>
</tr>
</table>
</form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<html>
<script language="C#" runat="server">
DataTable Cart;
DataView CartView;
ICollection CreateDataSource()
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
for (int i = 0; i < 9; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = "Item " + i.ToString();
dr[2] = 1.23 * (i + 1);
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
void Page_Load(Object sender, EventArgs e)
{
if (Session["DG4_ShoppingCart"] == null)
{
Cart = new DataTable();
Cart.Columns.Add(new DataColumn("Item", typeof(string)));
Cart.Columns.Add(new DataColumn("Price", typeof(string)));
Session["DG4_ShoppingCart"] = Cart;
}
else
{
Cart = (DataTable)Session["DG4_ShoppingCart"];
}
CartView = new DataView(Cart);
ShoppingCart.DataSource = CartView;
ShoppingCart.DataBind();
if (!IsPostBack)
{
// Load this data only once.
ItemsGrid.DataSource= CreateDataSource();
ItemsGrid.DataBind();
}
}
void Grid_CartCommand(Object sender, DataGridCommandEventArgs e)
{
DataRow dr = Cart.NewRow();
// e.Item is the table row where the command is raised.
// For bound columns, the value is stored in the Text property of the TableCell.
TableCell itemCell = e.Item.Cells[2];
TableCell priceCell = e.Item.Cells[3];
string item = itemCell.Text;
string price = priceCell.Text;
if (((Button)e.CommandSource).CommandName == "AddToCart")
{
dr[0] = item;
dr[1] = price;
Cart.Rows.Add(dr);
}
else
{
// Remove from Cart.
CartView.RowFilter = "Item='" + item + "'";
if (CartView.Count > 0)
{
CartView.Delete(0);
}
CartView.RowFilter = "";
}
ShoppingCart.DataBind();
}
</script>
<body>
<form runat=server>
<h3>DataGrid Example</h3>
<table cellpadding="5">
<tr valign="top">
<td>
<b>Product List</b>
<asp:DataGrid id="ItemsGrid"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
AutoGenerateColumns="false"
OnItemCommand="Grid_CartCommand"
runat="server">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
<Columns>
<asp:ButtonColumn
HeaderText="Add to cart"
ButtonType="PushButton"
Text="Add"
CommandName="AddToCart" />
<asp:ButtonColumn
HeaderText="Remove from cart"
ButtonType="PushButton"
Text="Remove"
CommandName="RemoveFromCart" />
<asp:BoundColumn
HeaderText="Item"
DataField="StringValue"/>
<asp:BoundColumn
HeaderText="Price"
DataField="CurrencyValue"
DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="right">
</ItemStyle>
</asp:BoundColumn>
</Columns>
</asp:DataGrid>
</td>
<td>
<b>Shopping Cart</b>
<asp:DataGrid id="ShoppingCart"
runat="server"
BorderColor="black"
BorderWidth="1"
GridLines="Both"
ShowFooter="false"
CellPadding="3"
CellSpacing="0">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
</asp:DataGrid>
</td>
</tr>
</table>
</form>
</body>
</html>
Das folgende Codebeispiel veranschaulicht, wie Sie Attribute dynamisch den Tags <td> und <tr> hinzufügen, die vom DataGrid-Steuerelement generiert werden.
<%@ Page Language="VB" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<html>
<script runat="server">
Function CreateDataSource() As ICollection
Dim dt As DataTable = New DataTable()
Dim dr As DataRow
Dim i As Integer
Dim dv As DataView
dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer)))
dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn("CurrencyValue", GetType(Double)))
For i = 0 to 4
dr = dt.NewRow()
dr(0) = i
dr(1) = "Item " + i.ToString()
dr(2) = 1.23 * (i+1)
dt.Rows.Add(dr)
Next i
dv = New DataView(dt)
CreateDataSource = dv
End Function
Sub Page_Load(sender As Object, e As EventArgs)
If Not IsPostBack
' Load this data only once.
ItemsGrid.DataSource = CreateDataSource()
ItemsGrid.DataBind()
End If
End Sub
Sub Item_Bound(sender As Object, e As DataGridItemEventArgs)
Dim itemType As ListItemType
Dim intCell As TableCell
itemType = CType(e.Item.ItemType, ListItemType)
If (itemType <> ListItemType.Header) And _
(itemType <> ListItemType.Footer) And _
(itemType <> ListItemType.Separator) Then
' Get the IntegerValue cell from the grid's column collection.
intCell = CType(e.Item.Controls(0), TableCell)
' Add attributes to the cell.
intCell.Attributes.Add("id", "intCell" + e.Item.ItemIndex.ToString())
intCell.Attributes.Add("OnClick", _
"Update_intCell" + _
e.Item.ItemIndex.ToString() + _
"()")
' Add attributes to the row.
e.Item.Attributes.Add("id", "row" + e.Item.ItemIndex.ToString())
e.Item.Attributes.Add("OnDblClick", _
"Update_row" + _
e.Item.ItemIndex.ToString() + _
"()")
End If
End Sub
</script>
<script language="vbscript">
sub Update_intCell0
Alert "You Selected Cell 0."
end sub
sub Update_intCell1
Alert "You Selected Cell 1."
end sub
sub Update_intCell2
Alert "You Selected Cell 2."
end sub
sub Update_intCell3
Alert "You Selected Cell 3."
end sub
sub Update_intCell4
Alert "You Selected Cell 4."
end sub
sub UpDate_row0
Alert "You selected the row 0."
end sub
sub UpDate_row1
Alert "You selected the row 1."
end sub
sub UpDate_row2
Alert "You selected the row 2."
end sub
sub UpDate_row3
Alert "You selected the row 3."
end sub
sub UpDate_row4
Alert "You selected the row 4."
end sub
</script>
<body>
<form runat=server>
<h3>
Adding Attributes to the <td> and <tr> <br>
Tags of a DataGrid Control
</h3>
<asp:DataGrid id="ItemsGrid" runat="server"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
ShowFooter="true"
OnItemDataBound="Item_Bound"
AutoGenerateColumns="false">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
<FooterStyle BackColor="#00aaaa">
</FooterStyle>
<Columns>
<asp:BoundColumn HeaderText="Number"
DataField="IntegerValue">
<ItemStyle BackColor="yellow">
</ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn
HeaderText="Item"
DataField="StringValue"/>
<asp:BoundColumn
HeaderText="Price"
DataField="CurrencyValue"
DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="right">
</ItemStyle>
</asp:BoundColumn>
</Columns>
</asp:DataGrid>
<br><br>
Click on one of the cells in the <b>Number</b> column to select the cell.
<br><br>
Double click on a row to select a row.
</form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<html>
<script runat="server">
ICollection CreateDataSource()
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
for (int i = 0; i < 5; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = "Item " + i.ToString();
dr[2] = 1.23 * (i+1);
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
void Page_Load(Object sender, EventArgs e)
{
if (!IsPostBack)
{
// Load this data only once.
ItemsGrid.DataSource = CreateDataSource();
ItemsGrid.DataBind();
}
}
void Item_Bound(Object sender, DataGridItemEventArgs e)
{
ListItemType itemType = (ListItemType)e.Item.ItemType;
if ((itemType != ListItemType.Header) &&
(itemType != ListItemType.Footer) &&
(itemType != ListItemType.Separator))
{
// Get the IntegerValue cell from the grid's column collection.
TableCell intCell = (TableCell)e.Item.Controls[0];
// Add attributes to the cell.
intCell.Attributes.Add("id", "intCell" + e.Item.ItemIndex.ToString());
intCell.Attributes.Add("OnClick",
"Update_intCell" +
e.Item.ItemIndex.ToString() +
"()");
// Add attributes to the row.
e.Item.Attributes.Add("id", "row" + e.Item.ItemIndex.ToString());
e.Item.Attributes.Add("OnDblClick",
"Update_row" +
e.Item.ItemIndex.ToString() +
"()");
}
}
</script>
<script language="vbscript">
sub Update_intCell0
Alert "You Selected Cell 0."
end sub
sub Update_intCell1
Alert "You Selected Cell 1."
end sub
sub Update_intCell2
Alert "You Selected Cell 2."
end sub
sub Update_intCell3
Alert "You Selected Cell 3."
end sub
sub Update_intCell4
Alert "You Selected Cell 4."
end sub
sub UpDate_row0
Alert "You selected the row 0."
end sub
sub UpDate_row1
Alert "You selected the row 1."
end sub
sub UpDate_row2
Alert "You selected the row 2."
end sub
sub UpDate_row3
Alert "You selected the row 3."
end sub
sub UpDate_row4
Alert "You selected the row 4."
end sub
</script>
<body>
<form runat=server>
<h3>
Adding Attributes to the <td> and <tr> <br>
Tags of a DataGrid Control
</h3>
<asp:DataGrid id="ItemsGrid" runat="server"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
ShowFooter="true"
OnItemDataBound="Item_Bound"
AutoGenerateColumns="false">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
<FooterStyle BackColor="#00aaaa">
</FooterStyle>
<Columns>
<asp:BoundColumn HeaderText="Number"
DataField="IntegerValue">
<ItemStyle BackColor="yellow">
</ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn
HeaderText="Item"
DataField="StringValue"/>
<asp:BoundColumn
HeaderText="Price"
DataField="CurrencyValue"
DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="right">
</ItemStyle>
</asp:BoundColumn>
</Columns>
</asp:DataGrid>
<br><br>
Click on one of the cells in the <b>Number</b> column to select the cell.
<br><br>
Double click on a row to select a row.
</form>
</body>
</html>
<%@ Page Language="JScript" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<html>
<script runat="server">
function CreateDataSource() : ICollection
{
var dt : DataTable = new DataTable();
var dr : DataRow;
dt.Columns.Add(new DataColumn("IntegerValue", System.Int32));
dt.Columns.Add(new DataColumn("StringValue", System.String));
dt.Columns.Add(new DataColumn("CurrencyValue", System.Double));
for (var i : int = 0; i < 5; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = "Item " + i.ToString();
dr[2] = 1.23 * (i+1);
dt.Rows.Add(dr);
}
var dv : DataView = new DataView(dt);
return dv;
}
function Page_Load(sender, e: EventArgs)
{
if (!IsPostBack)
{
// Load this data only once.
ItemsGrid.DataSource = CreateDataSource();
ItemsGrid.DataBind();
}
}
function Item_Bound(sender, e : DataGridItemEventArgs)
{
var itemType : ListItemType = ListItemType(e.Item.ItemType);
if ((itemType != ListItemType.Header) &&
(itemType != ListItemType.Footer) &&
(itemType != ListItemType.Separator))
{
// Get the IntegerValue cell from the grid's column collection.
var intCell : TableCell = TableCell(e.Item.Controls[0]);
// Add attributes to the cell.
intCell.Attributes.Add("id", "intCell" + e.Item.ItemIndex.ToString());
intCell.Attributes.Add("OnClick",
"Update_intCell" +
e.Item.ItemIndex.ToString() +
"()");
// Add attributes to the row.
e.Item.Attributes.Add("id", "row" + e.Item.ItemIndex.ToString());
e.Item.Attributes.Add("OnDblClick",
"Update_row" +
e.Item.ItemIndex.ToString() +
"()");
}
}
</script>
<script language="vbscript">
sub Update_intCell0
Alert "You Selected Cell 0."
end sub
sub Update_intCell1
Alert "You Selected Cell 1."
end sub
sub Update_intCell2
Alert "You Selected Cell 2."
end sub
sub Update_intCell3
Alert "You Selected Cell 3."
end sub
sub Update_intCell4
Alert "You Selected Cell 4."
end sub
sub UpDate_row0
Alert "You selected the row 0."
end sub
sub UpDate_row1
Alert "You selected the row 1."
end sub
sub UpDate_row2
Alert "You selected the row 2."
end sub
sub UpDate_row3
Alert "You selected the row 3."
end sub
sub UpDate_row4
Alert "You selected the row 4."
end sub
</script>
<body>
<form runat=server>
<h3>
Adding Attributes to the <td> and <tr> <br>
Tags of a DataGrid Control
</h3>
<asp:DataGrid id="ItemsGrid" runat="server"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
ShowFooter="true"
OnItemDataBound="Item_Bound"
AutoGenerateColumns="false">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
<FooterStyle BackColor="#00aaaa">
</FooterStyle>
<Columns>
<asp:BoundColumn HeaderText="Number"
DataField="IntegerValue">
<ItemStyle BackColor="yellow">
</ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn
HeaderText="Item"
DataField="StringValue"/>
<asp:BoundColumn
HeaderText="Price"
DataField="CurrencyValue"
DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="right">
</ItemStyle>
</asp:BoundColumn>
</Columns>
</asp:DataGrid>
<br><br>
Click on one of the cells in the <b>Number</b> column to select the cell.
<br><br>
Double click on a row to select a row.
</form>
</body>
</html>
<%@ Page Language="VB" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<html>
<script runat="server">
Function CreateDataSource() As ICollection
' Create sample data for the DataGrid control.
Dim dt As DataTable = New DataTable()
Dim dr As DataRow
' Define the columns of the table.
dt.Columns.Add(New DataColumn("IntegerValue", GetType(Int32)))
dt.Columns.Add(New DataColumn("StringValue", GetType(string)))
dt.Columns.Add(New DataColumn("CurrencyValue", GetType(double)))
' Populate the table with sample values.
Dim i As Integer
For i = 0 to 8
dr = dt.NewRow()
dr(0) = i
dr(1) = "Item " & i.ToString()
dr(2) = 1.23 * (i + 1)
dt.Rows.Add(dr)
Next i
Dim dv As DataView = New DataView(dt)
Return dv
End Function
Sub Page_Load(sender As Object, e As EventArgs)
' Load sample data only once when the page is first loaded.
If Not IsPostBack Then
ItemsGrid.DataSource = CreateDataSource()
ItemsGrid.DataBind()
End If
End Sub
Sub Button_Click(sender As Object, e As EventArgs)
' Count the number of selected items in the DataGrid control.
Dim count As Integer = 0
' Display the selected items.
Message.Text = "You Selected: <br>"
' Iterate through each item (row) in the DataGrid control
' and determine whether it is selected.
Dim item As DataGridItem
For Each item In ItemsGrid.Items
DetermineSelection(item, count)
Next
' If no items are selected, display the appropriate message.
If count = 0 Then
Message.Text = "No items selected"
End If
End Sub
Sub DetermineSelection(item As DataGridItem, ByRef count As Integer)
' Retrieve the SelectCheckBox CheckBox control from the specified
' item (row) in the DataGrid control.
Dim selection As CheckBox = CType(item.FindControl("SelectCheckBox"), CheckBox)
' If the item is selected, display the appropriate message and
' increment the count of selected items.
If Not selection Is Nothing Then
If selection.Checked Then
Message.Text &= "- " & item.Cells(1).Text & "<br>"
count = count + 1
End If
End If
End Sub
</script>
<body>
<form runat=server>
<h3>DataGrid Example</h3>
<b>Product List</b>
<asp:DataGrid id="ItemsGrid"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
AutoGenerateColumns="False"
runat="server">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
<Columns>
<asp:BoundColumn DataField="IntegerValue"
HeaderText="Item"/>
<asp:BoundColumn DataField="StringValue"
HeaderText="Description"/>
<asp:BoundColumn DataField="CurrencyValue"
HeaderText="Price"
DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="Right">
</ItemStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="Select Item">
<ItemTemplate>
<asp:CheckBox id="SelectCheckBox"
Text="Add to Cart"
Checked="False"
runat="server"/>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<br><br>
<asp:Button id="SubmitButton"
Text="Submit"
OnClick = "Button_Click"
runat="server"/>
<br><br>
<asp:Label id="Message"
runat="server"/>
</form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>
<html>
<script runat="server">
ICollection CreateDataSource()
{
// Create sample data for the DataGrid control.
DataTable dt = new DataTable();
DataRow dr;
// Define the columns of the table.
dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
// Populate the table with sample values.
for (int i = 0; i < 9; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = "Item " + i.ToString();
dr[2] = 1.23 * (i + 1);
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
void Page_Load(Object sender, EventArgs e)
{
// Load sample data only once when the page is first loaded.
if (!IsPostBack)
{
ItemsGrid.DataSource = CreateDataSource();
ItemsGrid.DataBind();
}
}
void Button_Click(Object sender, EventArgs e)
{
// Count the number of selected items in the DataGrid control.
int count = 0;
// Display the selected times.
Message.Text = "You Selected: <br>";
// Iterate through each item (row) in the DataGrid control and
// determine whether it is selected.
foreach (DataGridItem item in ItemsGrid.Items)
{
DetermineSelection(item, ref count);
}
// If no items are selected, display the appropriate message.
if (count == 0)
{
Message.Text = "No items selected";
}
}
void DetermineSelection(DataGridItem item, ref int count)
{
// Retrieve the SelectCheckBox CheckBox control from the specified
// item (row) in the DataGrid control.
CheckBox selection = (CheckBox)item.FindControl("SelectCheckBox");
// If the item is selected, display the appropriate message and
// increment the count of selected items.
if (selection != null)
{
if (selection.Checked)
{
Message.Text += "- " + item.Cells[1].Text + "<br>";
count++;
}
}
}
</script>
<body>
<form runat=server>
<h3>DataGrid Example</h3>
<b>Product List</b>
<asp:DataGrid id="ItemsGrid"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
AutoGenerateColumns="False"
runat="server">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
<Columns>
<asp:BoundColumn DataField="IntegerValue"
HeaderText="Item"/>
<asp:BoundColumn DataField="StringValue"
HeaderText="Description"/>
<asp:BoundColumn DataField="CurrencyValue"
HeaderText="Price"
DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="Right">
</ItemStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="Select Item">
<ItemTemplate>
<asp:CheckBox id="SelectCheckBox"
Text="Add to Cart"
Checked="False"
runat="server"/>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<br><br>
<asp:Button id="SubmitButton"
Text="Submit"
OnClick = "Button_Click"
runat="server"/>
<br><br>
<asp:Label id="Message"
runat="server"/>
</form>
</body>
</html>
Vererbungshierarchie
System.Object
System.Web.UI.Control
System.Web.UI.WebControls.WebControl
System.Web.UI.WebControls.BaseDataList
System.Web.UI.WebControls.DataGrid
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
Siehe auch
Referenz
DataGrid-Member
System.Web.UI.WebControls-Namespace
BaseDataList-Klasse
DataList
Repeater
BoundColumn-Klasse
ButtonColumn-Klasse
EditCommandColumn
HyperLinkColumn
TemplateColumn