asp.net 2.0에서는 그리드뷰에 드롭다운 목록을 중첩할 수 있습니다. 이는 매우 쉽습니다. 여기서 말하는 내용은 다음과 같습니다.
각 드롭다운 목록에는 다양한 콘텐츠가 바인딩되어 있습니다. 예를 들어 northwind 데이터베이스에서는 GRIDVIEW를 사용하여 각 카테고리를 표시하는 동시에 각 행의 카테고리를 드롭다운 목록 드롭다운 상자 형식으로 나열할 수 있습니다. 아래의 모든 제품 구현 방법을 소개합니다.
첫 번째는 페이지 부분의 코드입니다.
<asp:GridView ID="GridView1" runat="서버" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">
<열>
<asp:BoundField DataField="CategoryID" HeaderText="CategoryID" />
<asp:BoundField DataField="CategoryName" HeaderText="범주 이름" />
<asp:TemplateField HeaderText="제품">
<ItemTemplate>
< asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
코드 숨김 섹션에서,
protected void Page_Load(개체 전송자, EventArgs e)
{
if (!Page.IsPostBack)
{
// Table[1]에 카테고리가 포함되어 있기 때문입니다.
GridView1.DataSource = GetDataSet().Tables[1]
GridView1.DataBind()
;
}
개인 데이터 세트 GetDataSet()
{
string query = @"SELECT p.CategoryID,p.ProductID, p.ProductName FROM 제품 p
SELECT c.CategoryID,c.CategoryName FROM 카테고리 c"
string ConnectionString = "Server=localhost;Database=Northwind;user id=sa ;password=123456";
SqlConnection myConnection = new SqlConnection(connectionString);
SqlDataAdapter ad = new SqlDataAdapter(query, myConnection);
DataSet ds = new DataSet();
ad.Fill(ds);
return ds;
}
위 코드에서는 먼저 일반적인 데이터세트를 반환하고 이를 그리드뷰에 바인딩합니다. SQL 문에는 두 개의 문장이 있으며, 첫 번째 문장은 제품을 반환하는 것이고 두 번째 문장은 모든 범주를 반환하는 것입니다. 바인딩 Gridview를 사용할 때 우리는 다음을 사용합니다.
GridView1.DataSource = GetDataSet().Tables[1];, 첫 번째 테이블 테이블의 카테고리 레코드를 그리드뷰에 바인딩합니다. 다음으로 템플릿 열의 드롭다운 목록을 처리해야 합니다. 이는 row_databound 이벤트에서 수행할 수 있습니다. 다음과 같이 코드
protected void GridView1_RowDataBound(개체 전송자, GridViewRowEventArgs e)
{
DataTable myTable = new DataTable
new
DataColumn("ProductID");
DataColumn productNameColumn = new DataColumn("ProductName");
myTable.Columns.Add
(productNameColumn);
= new DataSet();
ds = GetDataSet();
문자열
표현식 = 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"];
newRow
["ProductName"] =
myTable.Rows.Add(newRow)
; DataSource = myTable;
ddl.DataTextField = "제품 이름
"
ddl.DataBind(
)
;
여기서의 원리는 대략 다음과 같습니다.
먼저 productid 및 productname 열을 포함하는 데이터 테이블을 만든 다음 이를 그리드뷰에 바인딩한 다음 사용했습니다.
CategoryID = Int32.Parse(e.Row.Cells[0].Text);
표현식 = "CategoryID = " + 카테고리ID;
여기서는 카테고리ID로 지정된 필터 표현식을 구성한 다음 전달합니다.
DropDownList ddl = (DropDownList)e.Row.FindControl("DropDownList1");
DataRow[] 행 = ds.Tables[0].Select(expression);
, 카테고리가 특정 카테고리ID와 동일한 모든 제품을 찾습니다. 여기서는 마지막으로 루프를 사용합니다.
, 특정 카테고리의 모든 제품을 데이터 테이블에 추가하고 마지막으로 데이터 테이블과 드롭다운 목록을 바인딩하여 기능을 구현합니다.