如何调用相应的参数

时间:2012-03-14 13:29:19

标签: c# asp.net gridview

对于某些人来说,这可能是一个非常基本的问题但我已经挣扎了很长时间。

我创建了一个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"]);
        }
    }

抱歉我的英语不好。

4 个答案:

答案 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