Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在下拉列表中,选定的索引已更改,我想在gridview中创建动态空文本框_C#_Asp.net - Fatal编程技术网

C# 在下拉列表中,选定的索引已更改,我想在gridview中创建动态空文本框

C# 在下拉列表中,选定的索引已更改,我想在gridview中创建动态空文本框,c#,asp.net,C#,Asp.net,我想在gridview中创建动态文本框,当我们创建5个动态文本框的每一行中的下拉选定索引发生更改时。当我使用谷歌搜索的一些代码在rowdatabound或ondatabound中创建动态文本框代码时,它不会启动,有人能帮我吗 <asp:DropDownList ID="ddlClassUnits" runat="server" class="textusername" Style="width: 100%;" ValidationGroup="ClassesRequired"

我想在gridview中创建动态文本框,当我们创建5个动态文本框的每一行中的下拉选定索引发生更改时。当我使用谷歌搜索的一些代码在rowdatabound或ondatabound中创建动态文本框代码时,它不会启动,有人能帮我吗

<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>

我认为您应该避免创建“文本框”——您需要做的是修改底层数据源以包含所需数量的新列,并设置
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>

请注意,这没有任何意义-它只是显示了当添加新行或将现有行设置为编辑模式时,如何动态添加提供文本框的列。

能否显示
ddlclassinuts\u SelectedIndexChanged
方法中的内容?但是,您可以始终使用文本框将
ItemTemplate
添加到GridView中,并根据DropDownList显示/隐藏整个列。我想从代码隐藏创建它,因此使用AutoGenerateColumns=“False”。我是这个领域的新手,所以请帮忙创建它。感谢如果您可以更新您的帖子,以显示绑定到GridView的数据类型,我可以更新我的答案来告诉你们我的意思。当textboxt被创建时,我们在每一列中创建了空的textbox,然后用户将填充该textbox并从中保存。嘿,伙计,你们在吗?我的示例是否让你们相信,不创建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;
}