在下拉列表中选择索引已更改我想在gridview中创建动态空文本框

时间:2017-05-18 17:18:43

标签: c# asp.net

我想在gridview中创建动态文本框,当我们创建5个动态文本框的每一行中的下拉选择索引更改时。当我使用谷歌搜索中的一些代码在rowdatabound或ondatabound中创建动态文本框代码时它不会触发任何人都可以帮助我Thanx

<asp:DropDownList ID="ddlClassUnits" runat="server" class="textusername"
    Style="width: 100%;" ValidationGroup="ClassesRequired"
    OnSelectedIndexChanged="ddlClassUnits_SelectedIndexChanged" AutoPostBack="true">

    <asp:ListItem Text="--Select--" Value="0"></asp:ListItem>

    <asp:ListItem Text="Unit-1" Value="1"></asp:ListItem>

    <asp:ListItem Text="SelectAll" Value="2"></asp:ListItem>

</asp:DropDownList>

<asp:GridView ID="GridViewclass" runat="server"
    OnRowDataBound="GridViewclass_RowDataBound"
    OnDataBound="GridViewclass_DataBound" AutoGenerateColumns="False"
    AutoGenerateSelectButton="true"
    HeaderStyle- BackColor="#174A63" HeaderStyle-ForeColor="white"
    AllowPaging="true" Font- Size="14px" Style="margin-left: 16%;"
    PageSize="15" Width="300px">

    <SelectedRowStyle CssClass="selectedRowStyle" />
</asp:GridView>

1 个答案:

答案 0 :(得分:0)

我认为你应该避免创造&#34;文本框&#34; - 您需要做的是修改基础DataSource以包含所需数量的新列,并设置AutoGenerateColumns="True"以便能够简单地刷新GridView。

这将为您提供一个可编辑的网格,而无需手动创建单个控件。

另一种选择是确定最大值。事先的数量,当选择发生变化时,显示更多列(在这种情况下为AutoGenerateColumns="False")。

我玩了一下,可以给你一个基本的想法 - 但是当你想要保存你的数据时,我看到另一个大问题......但是如果不了解你的任务,就无法回答这个问题。

<强>布局

<asp:DropDownList ID="ddlClassUnits" 
                  OnSelectedIndexChanged="ddlClassUnits_SelectedIndexChanged"
                  AutoPostBack="true"
                  runat="server">
    <asp:ListItem Text="--Select--" Value="0"></asp:ListItem>
    <asp:ListItem Text="Unit-1" Value="1"></asp:ListItem>
    <asp:ListItem Text="SelectAll" Value="2"></asp:ListItem>
</asp:DropDownList>

<asp:GridView ID="ClassGrid"
              runat="server"
              AutoGenerateColumns="false"
              EditIndex="0">
</asp:GridView>

我确实设置了EditIndex="0",因此您可以立即看到TextBox。

<强>代码

protected void ddlClassUnits_SelectedIndexChanged(object sender, EventArgs e)
{
    // get a dummy data source with 5 columns
    DataTable dt = this.GetData(5);

    // assign it as GridView data source
    this.GridViewclass.DataSource = dt;

    // create bound columns for your GridView
    foreach (DataColumn col in dt.Columns)
    {
        BoundField field = new BoundField();
        field.DataField = col.ColumnName;
        field.HeaderText = col.ColumnName;
        this.GridViewclass.Columns.Add(field);
    }

    this.GridViewclass.DataBind();
}

// creates a DataTable as datasource for your GridView with as many columns as you like
private DataTable GetData(int cols)
{
    DataTable dt = new DataTable("Class");

    // auto-generate columns
    for (int i = 0; i < cols; i++)
    {
        dt.Columns.Add($"col{i}", typeof(string));
    }

    // create an empty row just so you see something
    var dr = dt.NewRow();
    dt.Rows.Add(dr);

    return dt;
}

请注意,这并没有做任何明智的事情 - 它只是展示了如何动态添加列,在添加新行或将现有行设置为编辑模式时为您提供TextBox。