如何使用动态控件创建可编辑的GridView

时间:2014-07-17 06:19:47

标签: c# asp.net gridview

如何使用动态控件创建可编辑的网格视图。下图提供了一个想法。

enter image description here

在页面加载时,将显示一个gridview,其中只有一行而不是标题。该行包含两个下拉列表,两个文本框和一个图像按钮。一旦我在第一行输入数据,然后按图像按钮,将创建一个包含这些控件的新行,依此类推。

这怎么可能?

2 个答案:

答案 0 :(得分:0)

Gridview默认情况下不提供处理Insert操作的简单方法。 您将不得不执行几个步骤来处理这个问题。

首先,每个gridview列必须转换为TemplateColumn(TemplateField)。然后在页脚模板中,您必须插入控件(下拉列表,文本框等)

<asp:TemplateField HeaderText="Item Category">
    <%--Define item template--%>
    <FooterTemplate>    
      <asp:DropDownList ID="dropDownListCategory" runat="server"></asp:DropDownList>
    </FooterTemplate>
</asp:TemplateField>
...... similarly other footer templates

您必须为ImageButton添加onclick事件。

protected void imageButtonInsert_Click(object sender, EventArgs e)
{
    //Get the gridview row
    GridViewRow row = (sender as Control).NamingContainer as GridViewRow;
    DropDownList dropDownListCategory = row.FindControl("dropDownListCategory") as DropDownList;
    ///Similarly you can access the other controls here

    //If you are using SqlDataSource then you can add/assign these values to the insert parameters
    //Note that, you need to have insertcommand defined for the sql data source with appropreate parameters
    SqlDataSource1.InsertParameters.Add("category", dropDownListCategory.SelectedValue);
    //Similarly assign the other parameter values

    //Call the insert method of the sql data source.
    SqlDataSource1.Insert();

    //If you are not using data source approach, here you can insert the data to 
    // database by calling sql command or other ways


    //Rebind the gridview.
    GridView1.DataBind();

}

当您在gridview中显示一些行时,这应该可以。

大问题:空行

如果gridview中至少有一行,则上述方法有效。但是如果你没有任何行,那是第一次,gridview将是空的。如果gridview数据源为空,则它不显示任何内容,甚至页眉,页脚,行等。 作为初始解决方法,首先需要使标题始终可见

ShowHeaderWhenEmpty="true"  ShowFooter="true"

这可确保您始终拥有标头。 现在页脚根本不会显示,除非并且直到gridview中有一些行。 作为解决方法,您可以使用gridview的EmptyDataTemplate。

在这里,你需要再次添加所有控件,下拉列表,文本框等。不是你必须在这里使用相同的布局。您可以使用相同的控件ID,这样您就不需要再次编写代码隐藏了

<EmptyDataTemplate>
    <tr>
        <td><asp:DropDownList ID="dropDownListCategory" runat="server"></asp:DropDownList></td>
        <td><asp:Button runat="server" CommandName="Insert"  ID="buttonInsert" OnClick="imageButtonInsert_Click" Text="Insert" /></td>
        <%--Other controls go here--%>
    </tr>
</EmptyDataTemplate>

这对于第一次和连续加载都是好的。

您可能遇到的下一个问题是如何绑定这些下拉列表。为此,您需要使用RowCreated事件,您可以在其中访问下拉列表并填充它们

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Footer || e.Row.RowType == DataControlRowType.EmptyDataRow)
    {
        DropDownList dropDownListCategory = e.Row.FindControl("dropDownListCategory") as DropDownList;
        //similarly access the other controls and bind them
    }
}

答案 1 :(得分:-1)

对于此操作,可以在客户端使用Dynamic表。您可以在其中动态创建整个表,还可以应用看起来像网格视图的样式。对于样式使用可以使用JQuery DataTables来提供更多的控件。

通过使用JQuery DataTables或JQuery Code,您还可以在客户端动态添加行。