无法从RowIndex获取Gridview Row数据

时间:2013-11-20 06:48:14

标签: c# asp.net gridview

嗨,我遇到了一个问题,我希望你们能帮助我完成这件事。

我有一个带有更新面板的Web应用程序。我有一个网格视图放在更新面板内。在网格视图中,文本框的模板字段为Auto PostBack =“true”。在Text Changed事件中,我想在服务器端获取该行数据。

网格视图与页面加载事件的数据绑定,并在计时器滴答时每隔一分钟绑定一次。

我面临的问题是,在服务器端,我将行数据视为null。代码可以帮助你们。

Aspx页面

 <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
      <ContentTemplate>
        <div class="c-table">
          <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="True" PageSize="100" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowCommand="GridView1_RowCommand">
                  <Columns>

                  <asp:TemplateField HeaderText="Id">
                   <ItemTemplate>
                    <p> <%# Eval("Id") %></p>
                   </ItemTemplate>
                   <asp:TemplateField>

                   <asp:TemplateField HeaderText="Title">
                   <ItemTemplate>
                    <p> <%# Eval("Title") %></p>
                   </ItemTemplate>
                   </asp:TemplateField>

                <asp:TemplateField HeaderText="Bid">
                <ItemTemplate>
                <asp:TextBox ID="TextBox2" runat="server" OnTextChanged="TextBox2_TextChanged" AutoPostBack="true"></asp:TextBox>
                </ItemTemplate>
               </asp:TemplateField>

               <asp:TemplateField HeaderText="Link">
               <EditItemTemplate>
               <asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label>
               </EditItemTemplate>
               <ItemTemplate>
               <asp:LinkButton ID="LinkButton3" runat="server"  CommandName="visit" CommandArgument='<%# Bind("id") %>'>Visit</asp:LinkButton>  
               </ItemTemplate>
               </asp:TemplateField>


               </Columns>

               </asp:GridView>



              </ContentTemplate>
             </asp:UpdatePanel>

.cs代码

    protected void TextBox2_TextChanged(object sender, EventArgs e)
    {


        GridViewRow gridRow = ((GridViewRow)((TextBox)sender).NamingContainer);
        int index = gridRow.RowIndex;
        string check = GridView1.Rows[index].Cells[0].Text;



    }

在Check中我得到的值为NULL我不知道为什么?期待着寻求帮助。感谢

3 个答案:

答案 0 :(得分:2)

TextBox txt = (TextBox)gridView1.Rows[rowIndex].FindControl("id");
string test = txt.Text;

答案 1 :(得分:1)

更改GridTemplate并尝试

<asp:TemplateField HeaderText="Id">
 ItemTemplate>
<asp:Textbox id="txtId" runat="server" Text='<%# Eval("Id") %>'> </asp:Textbox>
 </ItemTemplate>
 <asp:TemplateField>

    GridViewRow row = sender.NamingContainer as GridViewRow;
    int rowidx = row.RowIndex;
    Textbox check = (TextBox) GridView1.Rows[row].Findcontrol("id");

试试此代码

答案 2 :(得分:1)

当我使用以下内容时,我变得空白(&#34;&#34;)

<asp:TemplateField>
   <ItemTemplate>
        <%# Eval("Id") %>
    </ItemTemplate>

但是以下是返回值:

<asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" ReadOnly="True" SortExpression="Id" />

希望这会有所帮助:)