ใน asp.net 2.0 คุณสามารถซ้อนรายการดรอปดาวน์ใน gridview ได้ ซึ่งง่ายมาก และสิ่งที่เรากำลังพูดถึงที่นี่คือ
ในรายการดรอปดาวน์แต่ละรายการ เนื้อหาที่แตกต่างกันจะถูกผูกไว้ ตัวอย่างเช่น ในฐานข้อมูล northwind คุณสามารถใช้ GRIDVIEW เพื่อแสดงแต่ละหมวดหมู่ได้ ในเวลาเดียวกัน หมวดหมู่ในแต่ละแถวสามารถแสดงในรูปแบบของกล่องดรอปดาวน์รายการ ผลิตภัณฑ์ทั้งหมดอยู่ภายใต้การแนะนำวิธีการดำเนินการด้านล่าง
อย่างแรกคือรหัสในส่วนของหน้า
<asp:GridView ID = "GridView1" runat = "เซิร์ฟเวอร์" AutoGenerateColumns = "เท็จ" 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>
ในส่วน codebehind
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
ถ้า (!หน้า IsPostBack)
{
// นี่เป็นเพราะว่า Table[1] มี Category
GridView1.DataSource = GetDataSet().Tables[1];
GridView1.DataBind();
}
-
ชุดข้อมูลส่วนตัว GetDataSet()
{
สตริงแบบสอบถาม = @"เลือก p.CategoryID,p.ProductID, p.ProductName จากผลิตภัณฑ์ p
เลือก c.CategoryID,c.CategoryName จากหมวดหมู่ c";
string ConnectionString = "Server=localhost;Database=Northwind;user id=sa ;รหัสผ่าน=123456";
SqlConnection myConnection = new SqlConnection(connectionString);
SqlDataAdapter ad = new SqlDataAdapter(query, myConnection);
DataSet ds = new DataSet();
ad.Fill(ds);
return ds;
}
ในโค้ดข้างต้น ขั้นแรกเราจะส่งคืนชุดข้อมูลทั่วไปและผูกเข้ากับ gridview โปรดทราบว่ามีสองประโยคในคำสั่ง SQL การผูก เมื่อใช้ gridview เราก็ใช้
GridView1.DataSource = GetDataSet().Tables[1]; ผูกบันทึกหมวดหมู่ในตารางตารางแรกกับ gridview ต่อไป เราจะต้องประมวลผลรายการแบบเลื่อนลงในคอลัมน์เทมเพลต ซึ่งสามารถทำได้ในเหตุการณ์ row_databound เขียน รหัสดังต่อไปนี้
โมฆะที่ได้รับการป้องกัน GridView1_RowDataBound (ผู้ส่งวัตถุ GridViewRowEventArgs e)
-
DataTable myTable = ใหม่ DataTable();
new
DataColumn("ProductID");
DataColumn productNameColumn = new DataColumn("ProductName");
myTable.Columns.Add(
productNameColumn);
= ชุดข้อมูลใหม่ ();
ds = GetDataSet ();
int categoryID = 0;
นิพจน์สตริง = String.Empty;
if (e.Row.RowType == DataControlRowType.DataRow)
{
categoryID = Int32.Parse(e.Row.Cells[0].Text);
expression = "CategoryID = " + categoryID;
DropDownListddl
= (DropDownList)e.Row.FindControl("DropDownList1");
ds.Tables[0].เลือก(นิพจน์);
foreach (แถว DataRow เป็นแถว)
{
DataRow newRow = myTable.NewRow();
newRow["ProductID"]
=
แถว
["ProductID"]
;
DataSource = myTable;
ddl.DataTextField = "ProductName";
ddl.DataValueField = "ProductID";
ddl.DataBind(
)
;
หลักการที่นี่มีคร่าวๆดังนี้:
ขั้นแรก เราสร้างตารางข้อมูล รวมถึงคอลัมน์ productid และ productname จากนั้นผูกเข้ากับ gridview จากนั้นจึงใช้
CategoryID = Int32.Parse(e.Row.Cells[0].Text);
expression = "CategoryID = " + categoryID;
สร้างนิพจน์ตัวกรอง ซึ่งระบุเป็น CategoryID ที่นี่ จากนั้นจึงส่งผ่าน
DropDownList ddl = (DropDownList)e.Row.FindControl("DropDownList1");
DataRow[] แถว = ds.Tables[0].Select(นิพจน์);
ค้นหาผลิตภัณฑ์ทั้งหมดที่มีหมวดหมู่เท่ากับรหัสหมวดหมู่ที่กำหนด ที่นี่ คอลเลกชัน datarow จะถูกสร้างขึ้น ขั้นสุดท้าย ให้ใช้การวนซ้ำ
เพิ่มผลิตภัณฑ์ทั้งหมดภายใต้หมวดหมู่ที่กำหนดลงใน DataTable และสุดท้ายผูก DataTable และรายการแบบเลื่อนลงเพื่อให้บรรลุฟังก์ชัน