Как вызвать соответствующий параметр на - PullRequest
1 голос
/ 14 марта 2012

Это может быть очень простой вопрос для некоторых, но я борюсь в течение довольно долгого времени.

Я создал страницу aspx, в которой есть возможность поиска по таблице пользователей (база данных). Когда кнопка «Поиск» нажата, сетка заполняется именами пользователей. И я поместил Редактировать Гиперссылку в каждой строке рядом с колонкой UserName.

Однако кнопка «Правка» должна получить параметр с именем «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 ]

2 голосов
/ 14 марта 2012

DataBinder.Eval может использоваться также и для кода

EditHyperLink
      .NavigateUrl("EditUserInfo.aspx?key=" + DataBinder.Eval(e.Row.DataItem,"UserCode"),650, 500, true);
1 голос
/ 14 марта 2012

Вам нужен 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 голосов
/ 14 марта 2012

Вы можете использовать e.Row.DataItem, чтобы получить требуемые значения, например ...

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

Если я использую строго типизированный Datarow / объект, я предпочитаю приводить этов его строго типизированную форму, то есть

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

HTH

0 голосов
/ 14 марта 2012

e.Row дает вам текущую строку, вам не нужно обращаться к oDataTable.Rows по индексу.

Итак, это будет:

e.Row["UserCode"]

вместо:

oDataTable.Rows[**I DONT KNOW WHAT TO TYPE IN HERE**]["UserCode"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...