2

我正在将我的 gridview 与多个数据键绑定。我试图在选择特定的gridview行时让这些数据源值显示在文本框上。因此我尝试了以下方法。

我设法根据列号将我的数据库值存储到一个字符串中。我正在使用 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 行显示不同数据键的不同值。

4

3 回答 3

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;
}
于 2013-08-02T05:42:37.027 回答
2

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

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

    if(selectedRow == null) return;

    /*GET VALUES FROM selectedRow AND DISPLAY THEM*/
}
于 2013-08-02T02:35:53.047 回答
2

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

要从所选行中获取值,请使用DataKeyNamesGridView 的属性。确保您有一个使用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(); 
于 2013-08-02T04:03:24.190 回答