【问题标题】:foreach looping only displaying last value of gridviewforeach 循环仅显示 gridview 的最后一个值
【发布时间】:2013-08-03 04:26:49
【问题描述】:

我正在将我的 gridview 与多个数据键绑定。我正在尝试在选择特定的GridView时,让这些代购物值在TextBox上显示在TextBox上。因此我尝试了以下方法。

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

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 行。基本上,我试图根据选定的gridview 行显示不同数据键的不同值。

【问题讨论】:

  • 你真正需要什么?
  • 让我编辑我的问题。好像还不够清楚。

标签: c# asp.net for-loop foreach


【解决方案1】:

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

protected void GWCase_SelectedIndexChanged(object sender, EventArgs e)
{        
    GridViewRow selectedRow = GWCase.SelectedRow;

    if(selectedRow == null) return;

    /*GET VALUES FROM selectedRow AND DISPLAY THEM*/
}

【讨论】:

  • 我在 foreach 循环上方添加了它,但它仍然从 gridview 返回我的最后一行数据。
  • 并且我的 selectedrow 不会为空。他们都充满了那个。只是它只返回我数据的最后一行。
  • 如前所述,您没有在foreach 循环中检查SelectedRow 的值。因此,循环中的每次迭代都会更新那些.Text 属性,最终显示给您的是循环中的最后一个值。
  • 请问如何根据所选的gridview检查值?
  • @TheVillageIdiot 向您展示了答案。您不需要您的foreach,只需将一个局部变量GridViewRow 设置为.SelectedRow,并使用它的索引值来获取您关心的值。
【解决方案2】:

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

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

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(); 

【讨论】:

    【解决方案3】:

    设法找出答案。

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多