2015-09-25 2 views
0

Я пытаюсь установить GridView1_RowEditing на идентификатор gridview, но не индекс, потому что он вызывает проблемы, когда конечный пользователь выполняет поиск значения и редактирует строку. Я изменил код от этого:Не удалось загрузить viewstate в GridView1_RowEditing

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
GridView1.EditIndex = e.NewEditIndex; 
BindGridView(); 
} 

к этому:

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
Label ID = (Label)GridView1.Rows[e.NewEditIndex].FindControl("ID"); 
    BindGridView(); 
} 

Идентификатор это имя столбца в базе данных.

, но я получаю эту ошибку, когда я нажимаю на кнопку изменить во второй раз:

Не удалось загрузить ViewState. Дерево управления, в которое загружается файл вида , должно совпадать с деревом управления, которое использовалось для сохранения окна просмотра во время предыдущего запроса. Например, при добавлении управление динамически, элементы управления, добавленные во время обратной связи, должны соответствовать типу и положению элементов управления, добавленных во время начального запроса .

+0

Попытка связать вид сетки, а затем получить доступ к его данным. Также почему вам нужно сохранить этот идентификатор. Когда запрос подан, переменная «ID» исчезнет. – neo

+0

Ну, я видел несколько дискуссий, но я не нахожу ответа. Это просто простой Gridview с функциями редактирования, отмены, обновления и поиска для поиска gridview. Проблема заключается в индексе gridview. Например, в Gridview есть 10 строк, если вы попытаетесь сделать это gridview самостоятельно и найти значение в строке 10, оно отображает одну строку, которая является строкой десятой, которая, если она прекрасна, но затем, если вы нажмете edit, то все десять строк отображает и редактирует индекс в первую строку. –

+0

Что вы подразумеваете под словом «Если вы попытаетесь сделать эту сетку самостоятельно»? – neo

ответ

0

Вы можете использовать параметры в методе BindGridView. txtSearch - это ваш идентификатор TextBox для поиска в gridview. Если вы ищете значение и нажмите «Редактировать», он останется в выбранной строке.

Например:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BindGridView(this.txtSearch.Text); 


    } 
} 

protected void BindGridView(string column1) 
{ 

    SqlCommand cmd = new SqlCommand("select * from table1 where (column1 like '%" + txtSearch.Text + "%')", con); 
    con.Open(); 
    cmd.Parameters.AddWithValue("@column1 ", column1); 
    GridView1.DataSource = cmd.ExecuteReader(); 
    GridView1.DataBind(); 
    con.Close(); 

} 

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    GridView1.EditIndex = e.NewEditIndex; 
    BindGridView(this.txtSearch.Text); 

} 

    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
{ 
    GridView1.EditIndex = -1; 
    BindGridView(this.txtSearch.Text); 
} 
+0

@ user3259951 - Спасибо, он работает. –

Смежные вопросы