我正在使用多个数据键绑定我的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的不同值。
答案 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;
}