如何从GridView';中选择所有数据;的当前行

本文关键字:数据 GridView 选择 | 更新日期: 2023-09-27 18:23:41

如何从GridView的当前行中选择所有数据。。我在GridView中有一个用于编辑链接的列。单击"编辑"链接按钮时,我希望使用所选行的数据。我正在尝试以下代码,但它给我返回了一个空值

protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
{
    gv.EditIndex = -1;
    GridViewRow gvRow = gv.Rows[ e.NewEditIndex];
    string selectedID = gvRow.Cells[3].Text;
}
                 <asp:GridView runat = "server" ID="gvRange0" SkinID="gridView"                AutoGenerateColumns="False"  
                            AllowSorting="True"   OnRowCancelingEdit="gvRange_RowCancelingEdit" OnRowDeleting="gvRange_RowDeleting"
                            OnRowEditing="gvRange_RowEditing" OnRowUpdating="gvRange_RowUpdating" 
                                Width="684px"  OnRowDataBound="gvRange_RowDataBound"  
                            DataMember="DefaultView" OnPageIndexChanged="gvRange_PageIndexChanged" 
                            OnPageIndexChanging="gvRange_PageIndexChanging" OnSorting="gvRange_Sorting" DataKeyNames = "RANGE_ID" 
                            OnSelectedIndexChanged="gvRange_SelectedIndexChanged" Height="65px" >
                              <Columns>
                                  <asp:TemplateField ShowHeader="False">
                                      <ItemTemplate>
                                      <ControlStyle Width="2px" />
                                          <asp:LinkButton ID="lnkDelete0" runat="server" CssClass="lnk" 
                                              CausesValidation="False" CommandName="Delete"
                                              Text="Delete" Visible="false"></asp:LinkButton>
                                          <asp:CheckBox runat="server" ID="chkSelect" CssClass="lbl" Text="" AutoPostBack="False" OnCheckedChanged="chkSelect_CheckedChanged" />
                                      </ItemTemplate>
                                  </asp:TemplateField>
                                  <asp:TemplateField ShowHeader="False">
                                    <ItemTemplate>
                                    <controlStyle width="2px" />
                                      <asp:LinkButton ID="lnkEdit" runat="server" CssClass="lnk" CausesValidation="False" CommandName="Edit"
                                        Text="Edit" ></asp:LinkButton>
                                    </ItemTemplate>
                                    <ItemStyle Width="5px" />
                                  </asp:TemplateField>
                                  <asp:TemplateField HeaderText="Ranges" SortExpression="Sort_Ranges">
                                      <ControlStyle Width="5px" />
                                      <ItemTemplate>
                                      <%#DataBinder.Eval(Container.DataItem,"Min_Age") %>
                                      <%# CheckNull(DataBinder.Eval(Container.DataItem,"Max_Age")) %>
                                      </ItemTemplate>
                                     <%-- <ItemTemplate>--%>
                                          <%--<asp:Label ID="lblStageName" CssClass="lbl" runat="server" Text='<%# Bind("Age_Range") %>' Width="1px"></asp:Label>--%>
                                    <%--  </ItemTemplate>--%>
                                  </asp:TemplateField>
                                  <asp:TemplateField HeaderText="Range ID">
                                  <ItemTemplate><%#DataBinder.Eval(Container.DataItem,"RANGE_ID") %></ItemTemplate>
                                  </asp:TemplateField>
                              </Columns>                        
                          </asp:GridView>

GridView中有4列。一个包含复选框,第二个是用于编辑的链接按钮,第三个是用一些值绑定的数据,第四个是我想用来从数据库中获取一些值的列(这是那里的主键),而这一列是隐藏的。

如何从GridView';中选择所有数据;的当前行

有时在gridview单元格中创建子控件。你可以试试这个代码。也许可以解决这个问题。

 protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
 {
   gv.EditIndex = -1;
   GridViewRow gvRow= (GridViewRow)(((Button)e.CommandSource).NamingContainer);

  foreach (TableCell Tc in gvRow.Cells)
            {
               //if you are not getting value than find childcontrol of TabelCell.
                string sss = c.Text;
                foreach (Control ctl in Tc.Controls)
                {
                    //Child controls
                    Label lb = ctl as Label;
                    string s = lb.Text;
                    sb.Append(s + ',');
                }
            }
}

我注意到您说您需要访问第4列,但您使用的是gvRow.Cells[3].Text;

Cell对象中的索引是从1开始的,所以如果你需要访问网格视图中的第四行,请尝试以下操作:

string selectedID = gvRow.Cells[4].Text;

编辑:

你能帮我确认两件事吗

1) 当您单击lnkEdit时,是否引发GridView1_RowEditing事件?

2) 如果是,e.NewEditIndex值是否始终显示为"0"
尝试单击不同行上的编辑链接,结果总是"0"吗?