2009-04-17 4 views
0

У меня есть веб-приложение (ASP.NET 2.0 C#), а на одной из страниц у меня есть Gridview. Gridview имеет 3 столбца (Edit, ID, Name), а сортировка включена. Редактировать не работает обычным способом: он использует идентификатор и добавляет его в QueryString, и пользователь переходит на страницу редактирования. Что-то вроде этого:Редактирование messing up после Gridview_Sorting

protected void Grid_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    string editID = Grid.DataKeys[e.NewEditIndex].Value.ToString(); 
    Response.Redirect("~/Admin/Edit_Page.aspx?EditID=" + 
        HttpUtility.HtmlDecode(editID)); 
} 

Когда страница загружается, сетка не сортируется в любом случае. Если я нажму кнопку «Редактировать», он отлично работает. Но если я нажму «Изменить ПОСЛЕ сортировки», он передаст идентификатор строки, которая была первоначально там, перед сортировкой, а не той, которая есть в настоящее время.

Почему это происходит? Есть идеи?

спасибо.

+0

Можете ли вы опубликовать свой код привязки данных в методе Page_Load()? –

ответ

1

Вы пересобираете свой набор данных?

+0

это то, что вы бы опубликовали в комментарии – TStamper

0

При загрузке страницы попробуйте связать сетку, когда страница не отправлена ​​назад. Я имею в виду следующий код загрузки страницы:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!this.IsPostBack) 
     PopulateGrid(); 
} 

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

+0

Извините ... Это не сработало ... – zohair

0

Если вы хотите, чтобы он работал, может быть другое возможное решение. Если вы используете кнопки для редактирования и имя пользователя CommandName для кнопки «edit» и CommandArgument, чтобы быть идентификатором редактируемого объекта, тогда это может сработать. Я даю вам код ниже.

код позади:

protected void Grid_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Edit") 
    { 
     int intEditId = Convert.ToInt32(e.CommandArgument); 
     Response.Redirect("~/Admin/Edit_Page.aspx?EditID=" + intEditId); 

    } 
} 

ASPX файл:

в сетке:

<asp:TemplateField> 
    <ItemTemplate><asp:ImageButton CommandName="Edit" 
    CommandArgument='<%# Eval("EditID") %>' runat="server" ID="lnkEdit" ImageUrl="../images/edit.gif" ToolTip="View/Edit"></asp:ImageButton></ItemTemplate></asp:TemplateField> 

Надеется, что это помогает. Anindya