对于某些人来说,这可能是一个非常基本的问题但我已经挣扎了很长时间。
我创建了一个aspx页面,它在用户表(数据库)上具有搜索功能。当搜索按钮被cliked相关时,Grid填充了UserNames。我在UserName Column旁边的每一行都放了一个Edit HyperLink。
然而,编辑按钮应该得到一个名为“UserCode”的参数(当我检索名称时也会出现此信息),但我无法将相应的代码写入相关行。请在我的代码中有一行包含我不知道在这里输入什么。而不是索引解决方案,欢迎任何其他建议。
DataTable oDataTable;
DataView oDataView;
protected void SearchLinkButton_Click(object sender, EventArgs e)
{
MembershipUserCollection allUsers = Membership.GetAllUsers();
if (allUsers != null)
{
oDataTable = new SystemUserAccountBsWrapper().SearchAllUsers(null); //Fetchs all user data
oDataView = oDataTable.DefaultView;
oDataView.Sort = "UserName";
oDataView.RowFilter = "UserName LIKE '%" + UserNameTextBox.Text + "%'";
UserGridView.DataSource = oDataView;
UserGridView.DataBind();
}
}
protected void UserGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
HyperLink EditHyperLink = (HyperLink)e.Row.FindControl("EditHyperLink");
EditHyperLink.NavigateUrl("EditUserInfo.aspx?key=" + oDataTable.Rows[**I DONT KNOW WHAT TO TYPE IN HERE**]["UserCode"]);
}
}
抱歉我的英语不好。
答案 0 :(得分:2)
DataBinder.Eval也可用于代码隐藏
EditHyperLink
.NavigateUrl("EditUserInfo.aspx?key=" + DataBinder.Eval(e.Row.DataItem,"UserCode"),650, 500, true);
答案 1 :(得分:1)
您需要DataIndex:
protected void UserGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
HyperLink EditHyperLink = (HyperLink)e.Row.FindControl("EditHyperLink");
EditHyperLink.NavigateUrl=("EditUserInfo.aspx?key=" + oDataTable.Rows[e.Row.DataItemIndex]["UserCode"], 650, 500, true);
}
}
但是有更好的方法可以做到这一点:
<columns>
<asp:HyperLinkColumn
HeaderText="Edit"
DataNavigateUrlField="UserCode"
DataNavigateUrlFormatString="EditUserInfo.aspx?key={0}"
Text="Edit"
Target="_blank"
/>
</columns>
答案 2 :(得分:0)
e.Row
为您提供当前行,您不必通过索引访问oDataTable.Rows。
所以,那将是:
e.Row["UserCode"]
而不是:
oDataTable.Rows[**I DONT KNOW WHAT TO TYPE IN HERE**]["UserCode"]
答案 3 :(得分:0)
您可以使用e.Row.DataItem获取所需的值,例如......
// If you require the first item in the row use...
e.Row.DataItem[0]
如果我使用的是强类型的Datarow / object,我更喜欢将其转换为强类型形式,即
// For datarows
(MyTypedDataRow)((DataRowView)e.Row.DataItem.Row).MyPropertyName;
HTH