2012-03-14 49 views
1

上的相应参数对于某些人来说,这可能是一个非常基本的问题,但我一直在苦苦挣扎。如何调用

我创建了一个在用户表(数据库)上具有搜索能力的aspx页面。当“搜索”按钮被锁定时,相关网格将填入UserNames。我在每一行的UserName列旁边都放置了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"]); 
     } 
    } 

对不起,我的英文不好。

回答

2

DataBinder.Eval可以隐藏代码也

EditHyperLink 
     .NavigateUrl("EditUserInfo.aspx?key=" + DataBinder.Eval(e.Row.DataItem,"UserCode"),650, 500, true); 
使用
+1

你和我眼中的战争英雄没什么两样,谢谢你,谢谢大家尽力帮助我。 – 2012-03-14 13:57:40

0

e.Row为您提供当前行,您不应该通过索引访问oDataTable.Rows。

所以,这将是:

e.Row["UserCode"] 

代替:

oDataTable.Rows[**I DONT KNOW WHAT TO TYPE IN HERE**]["UserCode"] 
+0

但我试过e.Row.TabIndex,e.Row.RowIndex,e.Row.DataItemIndex。他们没有工作:( – 2012-03-14 13:36:29

+0

VS下划线e.Row [“UserCode”]并说**不能使用[]对表达式的GridViewRow ** – 2012-03-14 13:49:35

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> 
+0

太糟糕DataItem索引带来每次相同的索引为不同的搜索。 – 2012-03-14 13:56:34

0

可以使用e.Row.DataItem获得您所需要的值,例如...

// If you require the first item in the row use... 
e.Row.DataItem[0] 

如果我使用的是强类型数据行/对象,我更愿意将其转换其强类型的形式,即

// For datarows 
(MyTypedDataRow)((DataRowView)e.Row.DataItem.Row).MyPropertyName; 

HTH