如何在gridview中生成子行 [英] How to generate child rows inside gridview

查看:88
本文介绍了如何在gridview中生成子行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在asp.net c#中创建gridview。点击按钮添加每一行。现在我想为特定行创建子行。喜欢1.1,1.2 ...同时点击添加按钮(每行)。怎么做?



我尝试了什么:



前端

<前lang =HTML> < asp:gridview ID = Gridview1 runat = server ShowFooter = true

AutoGenerateColumns = false >
< >
< asp:BoundField DataField = RowNumber HeaderText = 行号 / >
< asp: TemplateField HeaderText = 第1栏 >
< ItemTemplate >
< asp:TextBox ID = TextBox1 runat = server > < / asp:TextBox >
< / ItemTemplate >
< / asp:TemplateField >
< asp:TemplateField HeaderText = 第2栏 >
< ItemTemplate >
< asp:TextBox ID = TextBox2 runat = server > < / asp:TextBox >
< / ItemTemplate >
< / asp :TemplateField >
< asp:TemplateField HeaderText = 第3栏 >
< ItemTemplate >
< asp:TextBox ID = TextBox3 runat = server > < < span class =code-leadattribute> / asp:TextBox
>
< / ItemTemplate >
< ; / asp:TemplateField >
< asp:TemplateField >
< ItemTemplate >
< asp:LinkBut​​ton ID = Link1 runat = server > 添加< / asp:LinkBut​​ton >
< / ItemTemplate >


< FooterStyle Horizo​​ntalAlign = 正确 / >
< span class =code-keyword>< FooterTemplate >
< asp:按钮 ID = ButtonAdd runat = server 文字 = 添加新行 OnClick = ButtonAdd_Click / >
< / FooterTemplate >
< / asp:TemplateField >
< / Columns >
< / asp:gridview >





代码背后

<前lang =c#> 私人 < span class =code-keyword> void AddNewRowToGrid()
{
int rowIndex = 0 ;

if (ViewState [ CurrentTable]!= null
{
DataTable dtCurrentTable =(DataTable)ViewState [ CurrentTable];
DataRow drCurrentRow = null ;
if (dtCurrentTable.Rows.Count > 0
{
for int i = < span class =code-digit> 1
; i < = dtCurrentTable.Rows.Count; i ++)
{
// 提取TextBox值
TextBox box1 =(TextBox)Gridview1.Rows [rowIndex] .Cells [ 1 ]。FindControl( TextBox1< /跨度>);
TextBox box2 =(TextBox)Gridview1.Rows [rowIndex] .Cells [ 2 ]。FindControl( TextBox2);
TextBox box3 =(TextBox)Gridview1.Rows [rowIndex] .Cells [ 3 ]。FindControl( TextBox3);

drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow [ RowNumber] = i + 1 ;

dtCurrentTable.Rows [i - 1 ] [ Column1] = box1.Text;
dtCurrentTable.Rows [i - 1 ] [ Column2] = box2.Text;
dtCurrentTable.Rows [i - 1 ] [ Column3] = box3.Text;

rowIndex ++;
}
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState [ CurrentTable] = dtCurrentTable;

Gridview1.DataSource = dtCurrentTable;
Gridview1.DataBind();
}
}
else
{
Response.Write( ViewState为空);
}
SetPreviousData();
}

解决方案

如上所述,您无法在Gridview控件中为行添加子行。您需要为要包含子行的每一行添加新网格。请参考下面的链接,它应该给你一个想法。



使用C#和VB.Net在ASP.Net中嵌套GridView示例 [ ^ ]


Created gridview in asp.net c#.Adding each row with button click .now i want to create child rows for particular row. like 1.1,1.2...while clicking add button (in each row).how to do it?

What I have tried:

Front end

 <asp:gridview ID="Gridview1" runat="server" ShowFooter="true" 

        AutoGenerateColumns="false" >
        <Columns>
        <asp:BoundField DataField="RowNumber" HeaderText="Row Number" />
        <asp:TemplateField HeaderText="Col 1">
            <ItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Col 2">
            <ItemTemplate>
                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Col 3">
            <ItemTemplate>
                 <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
            </ItemTemplate>
             </asp:TemplateField>
                <asp:TemplateField >
            <ItemTemplate>
                 <asp:LinkButton ID="Link1" runat="server">Add</asp:LinkButton>
            </ItemTemplate>
            
            
            <FooterStyle HorizontalAlign="Right" />
            <FooterTemplate>
             <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" OnClick="ButtonAdd_Click" />
            </FooterTemplate>
        </asp:TemplateField>
        </Columns>
</asp:gridview>



code behind

private void AddNewRowToGrid()
        {
            int rowIndex = 0;

            if (ViewState["CurrentTable"] != null)
            {
                DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
                DataRow drCurrentRow = null;
                if (dtCurrentTable.Rows.Count > 0)
                {
                    for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
                    {
                        //extract the TextBox values
                        TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
                        TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
                        TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

                        drCurrentRow = dtCurrentTable.NewRow();
                        drCurrentRow["RowNumber"] = i + 1;

                        dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text;
                        dtCurrentTable.Rows[i - 1]["Column2"] = box2.Text;
                        dtCurrentTable.Rows[i - 1]["Column3"] = box3.Text;

                        rowIndex++;
                    }
                    dtCurrentTable.Rows.Add(drCurrentRow);
                    ViewState["CurrentTable"] = dtCurrentTable;

                    Gridview1.DataSource = dtCurrentTable;
                    Gridview1.DataBind();
                }
            }
            else
            {
                Response.Write("ViewState is null");
            }
            SetPreviousData();
        }

解决方案

As said you cannot add child rows for rows in Gridview control. You need to add new grid for each row you want to have child rows. Refer below link it should give you idea.

Nested GridView Example in ASP.Net using C# and VB.Net[^]


这篇关于如何在gridview中生成子行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆