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

时间:2013-08-02 02:25:42

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

我正在使用多个数据键绑定我的gridview。我正在尝试在选择特定的gridview行时让这些datakey值显示在文本框中。因此,我尝试了以下方法。

我设法根据列号将数据库值存储到字符串中。我正在使用foreach,以便在选择特定行时循环整个gridview。但我不太清楚为什么它只显示我的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行显示不同datakey的不同值。

3 个答案:

答案 0 :(得分:2)

嗯,我认为你只想要所选行的价值。在循环时,您不会检查行是否被选中。这就是为什么它只显示最后一行的内容。请尝试以下方法:

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

    if(selectedRow == null) return;

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

答案 1 :(得分: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(); 

答案 2 :(得分:2)

管理以找出答案。

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