[英]binding datatable multiple rows data to DropDownList
對數據庫進行查詢后,我將從數據庫中檢索數據表,如下所示。 我的asp.net Web表單應用程序具有GridView,並且具有BoundField和DropDownList。
我想將LectureID綁定到BoundField並將pariculat演講的主題綁定到DropDownList中。
不知道如何進行所需的測試。
LectureID SubjectName
1 Sub1
1 Sub2
1 Sub3
1 Sub4
2 Sub1
2 Sub4
<asp:GridView ID="grdvDetail" runat="server">
<Columns>
<asp:BoundField HeaderText="LectureID" DataField="LectureID" SortExpression="LectureID">
<HeaderStyle HorizontalAlign="Center" />
<ItemStyle Font-Size="11px" />
</asp:BoundField>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="ddlSubject" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
//Fill DataTable Using SQL Query
grdvDetail.DataSource = dt;
grdvDetail.DataBind();
for (int i = 0; i < grdvDetail.Rows.Count; i++)
{
DropDownList ddlSubject = ((DropDownList)grvProduct.Rows[i].FindControl("ddlSubject"));
DataTable dtDDL = new DataTable();
//Fill DataTable Using SQL Query
ddlSubject.DataSource = dtDDL;
ddlSubject.DataTextField = "SubjectName";
ddlSubject.DataValueField = "SubjectName";
ddlSubject.DataBind();
}
}
}
可能不是完美的解決方案。 想法是根據給定的數據表創建鍵,值集合。
Dictionary
集合用於將講座ID保留為Key
,將相關主題保留在List<string>
作為Value
。
GridView bind with Dictionary
並且在GridView的RowDataBound event
,根據需要填充每個dropdownlist
。
標記 :
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
onrowdatabound="GridView1_RowDataBound">
<Columns>
<asp:BoundField DataField="Key" HeaderText="Lecture ID" />
<asp:TemplateField HeaderText="Subject Name">
<ItemTemplate>
<asp:DropDownList ID="ddlSubject" runat="server" >
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
背后的代碼 :
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//test data
DataTable dt = new DataTable();
dt.Columns.Add("LectureID", typeof(int));
dt.Columns.Add("SubjectName");
dt.Rows.Add(1, "Sub1");
dt.Rows.Add(1, "Sub2");
dt.Rows.Add(1, "Sub3");
dt.Rows.Add(1, "Sub4");
dt.Rows.Add(2, "Sub1");
dt.Rows.Add(2, "Sub4");
dt.AcceptChanges();
//Bind with GridView with Dictionary collection
GridView1.DataSource = GetDictionary(dt);
GridView1.DataBind();
}
}
//get a dictionary of distinct lectureID
private Dictionary<int, List<string>> GetDictionary(DataTable dt)
{
var dictionary = new Dictionary<int, List<string>>();
foreach (DataRow dr in dt.Rows)
{
int iKey = Convert.ToInt32(dr["LectureID"]);
if (dictionary.ContainsKey(iKey))
{
List<string> lst = dictionary[iKey] as List<string>;
lst.Add(dr["SubjectName"].ToString());
dictionary[iKey] = lst;
}
else
{
var lst = new List<string>();
lst.Add(dr["SubjectName"].ToString());
dictionary.Add(iKey, lst);
}
}
return dictionary;
}
行數據綁定事件 :
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow &&
e.Row.DataItem != null)
{
DropDownList ddl = e.Row.FindControl("ddlSubject") as DropDownList;
ddl.DataSource = ((KeyValuePair<int, List<string>>)e.Row.DataItem).Value;
ddl.DataBind();
}
}
結果不同的LectureID與DropDownList中的各個主題 :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.