从Gridview中的文本框中读取值

时间:2014-05-16 00:14:53

标签: asp.net gridview textbox

我想在ASP.NET中读取我的项目的整个gridview的值。 我一直在尝试和搜索很长一段时间,并没有找到我正在寻找的东西。

这是我在aspx页面中的gridview:

<asp:GridView ID="GridViewNatuur" runat="server" AutoGenerateColumns="False">
                <Columns>
                    <asp:BoundField DataField="Naam" HeaderText="Mana" />
                    <asp:TemplateField HeaderText="Aantal">
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" TextMode="Number" AutoPostBack="False" MaxLength="100" Text="0"></asp:TextBox>
                                                    </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

页面加载时获取6行的值。对于每个行,将创建一个文本框。但是,所有这些文本框都具有相同的ID,这很糟糕。我怎么能阻止这个?或者,我怎样才能读取每一行的文本框值?

BLNatuur blnatuur = new BLNatuur();
        List<Natuur> naturen = blnatuur.GetNaturen();
        BLManaCost blmanacost = new BLManaCost();
        int i = 0;
        int aantal;

        foreach (GridViewRow gridRow in GridViewNatuur.Rows)
        {
            ManaCost manaCost = new ManaCost();
            manaCost.KaartId = kaartInsertId;
            manaCost.TypeId = naturen[i].ID;
            string opgehaaldAantal = ((TextBox)GridViewNatuur.Rows[gridRow.RowIndex].Cells[1].FindControl("TextBox1")).Text;
            bool correct = Int32.TryParse(opgehaaldAantal, out aantal);
            if (!correct)
            {
                aantal = 0;
            }
            manaCost.Aantal = aantal;
            i++;
            blmanacost.InsertManaCost(manaCost);
        }

在我粘贴的代码中,变量我想要获取字符串opgehaaldAantal的一部分。

请注意,我目前还没有使用ASP.NET。

3 个答案:

答案 0 :(得分:1)

改变
 string opgehaaldAantal = ((TextBox)GridViewNatuur.Rows[gridRow.RowIndex].Cells[1].FindControl("TextBox1")).Text;

 string opgehaaldAantal = ((TextBox)gridRow .FindControl("TextBox1")).Text;

答案 1 :(得分:0)

要获取所有文本框的值,请创建一个OnRowDataBound事件,该事件在创建时读取每个TextBox,并将Text值添加到List或类似集合中。

答案 2 :(得分:0)

我解决了这个问题。 首先,我遇到了一个问题,当数字文本框仍然是数字时,我无法读取数字文本框的值。所以我将它转换为后端的SingleLine文本框。

我还发现TextBox控件位于单元格控件数组的第二个位置。 (第一个是细胞本身)。所以我必须读取该数组点以获取TextBox。

BLNatuur blnatuur = new BLNatuur();
        List<Natuur> naturen = blnatuur.GetNaturen();
        BLManaCost blmanacost = new BLManaCost();
        int i = 0;
        int aantal;

        foreach (GridViewRow gridRow in GridViewNatuur.Rows)
        {
            ManaCost manaCost = new ManaCost();
            manaCost.KaartId = kaartInsertId;
            manaCost.TypeId = naturen[i].ID;

            TextBox textbox = (TextBox)gridRow.Cells[1].Controls[1];
            textbox.TextMode = TextBoxMode.SingleLine;
            String opgehaaldAantal = textbox.Text;

            bool correct = Int32.TryParse(opgehaaldAantal, out aantal);
            if (!correct)
            {
                aantal = 0;
            }
            manaCost.Aantal = aantal;
            i++;
            blmanacost.InsertManaCost(manaCost);  
        }

我要感谢那些调查过它并帮助我找出问题的人。