В asp.net 2.0 вы можете вложить раскрывающийся список в представление сетки. Это очень просто, и мы здесь говорим о следующем.
В каждом раскрывающемся списке привязано различное содержимое. Например, в базе данных Northwind вы можете использовать GRIDVIEW для отображения каждой категории. В то же время категория в каждой строке может быть указана в виде раскрывающегося списка. Все продукты ниже. Метод реализации представлен ниже.
Первый — это код в части страницы.
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:BoundField DataField="CategoryID" HeaderText="CategoryID" />
<asp:BoundField DataField="CategoryName" HeaderText="Category Name" />
<asp:TemplateField HeaderText="Products">
<ItemTemplate>
< asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
В разделе кода программной части
protected void Page_Load (отправитель объекта, EventArgs e)
{
если (!Page.IsPostBack)
{
// Это потому, что Table[1] содержит категории
GridView1.DataSource = GetDataSet().Tables[1]
}
;
}
частный набор данных GetDataSet()
{
string query = @"SELECT p.CategoryID,p.ProductID, p.ProductName FROM Products p
SELECT c.CategoryID,c.CategoryName FROM Категории c";
string ConnectionString = "Server=localhost;Database=Northwind;user id=sa ;пароль=123456";
SqlConnection myConnection = новый SqlConnection(connectionString);
SqlDataAdapter ad = новый SqlDataAdapter(query, myConnection);
DataSet ds = новый DataSet();
ad.Fill(ds);
return ds;
}
В приведенном выше коде сначала мы возвращаем типичный набор данных и привязываем его к представлению таблицы. Обратите внимание, что в операторе SQL есть два предложения: первое предложение предназначено для возврата продукта, а второе — для возврата всех категорий. привязка. При использовании GridView мы используем
GridView1.DataSource = GetDataSet().Tables[1];, привяжите запись категории в первой таблице таблицы к представлению сетки. Далее нам нужно обработать раскрывающийся список в столбце шаблона. Это можно сделать в событии row_databound. кодируйте следующим образом
protected void GridView1_RowDataBound (отправитель объекта, GridViewRowEventArgs e)
{
DataTable myTable = новый
DataColumn productIDColumn = новый DataColumn («ProductID»);
DataColumn ProductNameColumn = новый DataColumn («ProductName»);
myTable.Columns.Add
(productIDColumn
);
= новый DataSet();
ds = GetDataSet();
int CategoryID = 0;
строковое выражение = String.Empty;
if (e.Row.RowType == DataControlRowType.DataRow)
{
CategoryID = Int32.Parse(e.Row.Cells[0].Text);
выражение = "CategoryID = " + CategoryID;
DropDownListddl
= (DropDownList)e.Row.FindControl("DropDownList1");
ds.Tables[0].Select(выражение);
foreach (строка DataRow в строках)
{
DataRow newRow = myTable.NewRow();
newRow["ProductID"] = row["ProductName"];
newRow["ProductName"
] = row["ProductName"];
myTable.Rows.Add
(newRow);
DataSource = myTable;
ddl.DataTextField = "ProductName";
ddl.DataValueField = "ProductID"
;
}
};
Принцип здесь примерно следующий:
Сначала мы создали таблицу данных, включая столбцы ProductID и ProductName, а затем привязали ее к представлению сетки, а затем использовали
CategoryID = Int32.Parse(e.Row.Cells[0].Text
выражение = "CategoryID = " + CategoryID;
Создайте выражение фильтра, указанное здесь как идентификатор категории, а затем передайте
DropDownList ddl = (DropDownList)e.Row.FindControl("DropDownList1");
DataRow[] rows = ds.Tables[0].Select(expression);
, найти все продукты, категория которых равна определенному идентификатору категории. Здесь создается коллекция строк данных. Наконец, используйте цикл.
, добавьте все продукты определенной категории в таблицу данных и, наконец, свяжите таблицу данных и раскрывающийся список для достижения функции.