2012-03-14 43 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