如何将下拉列表动态添加到Gridview数据行

时间:2013-04-19 18:24:33

标签: gridview dynamic

我需要做的是,当用户从下拉列表中选择一个值时,它将在gridview的行内生成动态标签和动态下拉列表。标签数量与DDL数量相同,其数量取决于用户的选择。我成功地显示了标签,但没有显示DDL。

ASPX:

 <div id="dvCoverages" class="TD">
                <asp:Literal ID="litCoverages" Text="Coverages" runat="server" /></div>
            <div class="MAD">
                <asp:GridView ID="gvCoverages" runat="server" AllowSorting="True" AutoGenerateColumns="False"
                    GridLines="None">
                    <Columns>
                        <asp:BoundField DataField="LeftLabel"></asp:BoundField>
                        <asp:TemplateField></asp:TemplateField>
                        <asp:BoundField DataField="RightLabel"></asp:BoundField>
                        <asp:TemplateField></asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </div>

C#:

public void SetCoveragesDDL(EndososWS.CoveragesInfo[] objCoveragesInfo)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("LeftLabel");
        dt.Columns.Add(new DataColumn("LeftDDL", typeof(string)));
        dt.Columns.Add("RightLabel");
        dt.Columns.Add(new DataColumn("RightDDL", typeof(string)));

        List<Label> labels = new List<Label>();
        List<DropDownList> DDLs = new List<DropDownList>();
        int numberOfCoverages = objCoveragesInfo.Length;
        if (numberOfCoverages != 0)
        {
            for (int i = 1; i <= numberOfCoverages; i++)
            {
                DataRow dr = dt.NewRow();
                var tempLabel = new Label();
                var tempDDL = new DropDownList();

                tempLabel.ID = "label" + i;
                tempLabel.Text = objCoveragesInfo[i - 1].CoverageName;
                tempDDL.ID = "textBox" + i;
                tempDDL.Attributes.Add(">> Select <<", "");

                if (i % 2 == 0)
                {
                    dr["RightLabel"] = tempLabel.Text + ": ";

                    labels.Add(tempLabel);
                    DDLs.Add(tempDDL);
                }
                else
                {
                    dr["LeftLabel"] = tempLabel.Text + ": " + tempDDL.SelectedIndex;
                    dr["LeftDDL"] = tempDDL;

                    labels.Add(tempLabel);
                    DDLs.Add(tempDDL);
                    if (i + 1 <= numberOfCoverages)
                    {
                        i++;
                        tempLabel.ID = "label" + i;
                        tempLabel.Text = objCoveragesInfo[i - 1].CoverageName;
                        tempDDL.ID = "textBox" + i;
                        tempDDL.Attributes.Add(">> Select <<", "");

                        dr["RightLabel"] = tempLabel.Text + ": ";

                        labels.Add(tempLabel);
                        DDLs.Add(tempDDL);
                    }
                }

                dt.Rows.Add(dr);
            }

            gvCoverages.DataSource = dt;
            gvCoverages.DataBind();
        }

    }

1 个答案:

答案 0 :(得分:0)

尝试做这样的事情

tempDDL.Insert(0, new ListItem(">> Select <<", string.Empty));

而不是

tempDDL.Attributes.Add(">> Select <<", "");