foreach循环只显示gridview的最后一个值

本文关键字:最后一个 gridview 显示 循环 foreach | 更新日期: 2023-09-27 18:25:49

我正在用多个数据键绑定我的网格视图。当选择网格视图的特定行时,我试图让这些数据键值显示在文本框上。因此,我尝试了以下方法。

我设法根据列号将数据库值存储到一个字符串中。我使用foreach,以便在选择特定行时循环整个网格视图。但我不太确定为什么它只显示我网格视图的最后一个值?

protected void GWCase_SelectedIndexChanged(object sender, EventArgs e)
    {
        foreach (GridViewRow gvr in GWCase.Rows)
        {
            string detail = GWCase.DataKeys[gvr.RowIndex].Values[0].ToString();
            string propertydetail = GWCase.DataKeys[gvr.RowIndex].Values[1].ToString();
            string suspectdetail = GWCase.DataKeys[gvr.RowIndex].Values[2].ToString();
            tbdetails.Text = detail;
            tbproperty.Text = propertydetail;
            tbsuspect.Text = suspectdetail;
        }

我真的不能把它转换成一个合适的for循环,因为我在那里也有网格视图行。基本上,我试图根据所选的gridview行显示不同datakey的不同值。

foreach循环只显示gridview的最后一个值

我认为您只需要所选行中的值。循环时,不检查行是否被选中。这就是为什么它只显示最后一行的内容。尝试以下操作:

protected void GWCase_SelectedIndexChanged(object sender, EventArgs e)
{        
    GridViewRow selectedRow = GWCase.SelectedRow;
    if(selectedRow == null) return;
    /*GET VALUES FROM selectedRow AND DISPLAY THEM*/
}

回答您的问题:基本上,我试图根据所选的gridview行显示不同数据键的不同值

要从所选行获取值,请使用GridView的DataKeyNames属性。使用AutoGenerateSelectButton="true"或添加一个按钮并将其CommandName属性设置为"Select",确保您有一个selectbutton。

DataKeyNames属性设置为表的主键。这也可以包含多个字段。

<asp:GridView ID="Employees" runat="server" DataSourceID="sourceEmployees" 
DataKeyNames="EmployeeID">

selectedIndexChanged事件中,您可以访问此PrimaryKey列以及其他列的值:

protected void gridEmployees_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    int index = gridEmployees.SelectedIndex;
//retrieve the Primary Key field from the SelectedDataKey property. 
  int ID = (int)gridEmployees.SelectedDataKey.Values["EmployeeID"];
// Get other columns values 
string firstName = gridEmployees.SelectedRow.Cells[2].Text; 
string lastName = gridEmployees.SelectedRow.Cells[1].Text; 
lblRegion.Text = gridEmployees.SelectedRow.Cells[9].Text;
}

您可以直接确定所选行的第一个键字段的数据键值的另一种方法是使用SelectedValue属性

// Returns only the value of First DataKey Field
int ID = (int)gridEmployees.SelectedValue.ToString(); 

设法找到了答案。

protected void GWCase_SelectedIndexChanged(object sender, EventArgs e)
{
  int idx = GWCase.SelectedIndex; //add this line in
  string detail = GWCase.DataKeys[idx].Values[0].ToString();
  string propertydetail = GWCase.DataKeys[idx].Values[1].ToString();
  string suspectdetail = GWCase.DataKeys[idx].Values[2].ToString();
  tbdetails.Text = detail;
  tbproperty.Text = propertydetail;
  tbsuspect.Text = suspectdetail;
}