簡體   English   中英

將datatable多行數據綁定到DropDownList

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM