2013-08-27 3 views
1

У меня есть GridView, в котором я добавил дополнительные заголовки в разных точках, чтобы создать иллюзию разных разделов GridView. Проблема, с которой я сталкиваюсь, заключается в том, что когда я выполняю обратную передачу, созданные HeaderRows превращаются в пустые строки. Я могу добавить дополнительные HeaderRows снова, но затем столкнулся с проблемой, когда пустые строки «наталкивают» данные на неправильные «разделы».Удалить пустую строку из GridView без подключения к DB

Что бы я хотел сделать, в ответ на вызов вызовите функцию, которая проходит через GridView и удаляет пустые строки/старые заголовки HeaderRows, а затем вызывает функцию, которая добавила HeaderRows в первую очередь.

Мне нужна помощь с функцией удаления строк. Код, который я прямо сейчас для функции:

protected void removeBlankRows() 
{ 
    foreach (GridViewRow row in GridView1.Rows) 
    { 
     if (row.Cells[6].Text == "") 
     { 
      //-->code to remove blank row here<-- 
     } 
    } 
} 
+0

Является ли пустая строка, которую вы хотите удалить, всегда будет иметь индекс 6? –

ответ

0
protected void removeBlankRows() 
{ 
    for (int i = 0; i < GridView1.Rows.Count; i++) 
      { 
       if (GridView1.Rows[i].RowType == DataControlRowType.DataRow) 
       { 
        string strtrial = Convert.Tostring(row.Cells[6].Text); 
        if(string.IsNullOrEmpty(strtrial)) 
        GridView1.DeleteRow(i); 
       } 
      } 

Однако будет лучше, если вы удалите эти строки в Rowbound случае.

+0

Я бы посоветовал не изменять коллекцию во время итерации. Даже если это работает в этом случае, вы просите о неприятностях, когда вы попадаете в эту привычку. – priehl

+0

@priehl Я возьму совет, но не могли бы вы рассказать подробнее, все, о чем я сейчас думаю, это параллельные транзакции, которые, похоже, не будут проблемой здесь (я прав?). Хороший совет всегда приветствуется, спасибо! –

0
var blanks = GridView1.Rows 
    .Where(e => string.IsNullOrEmpty(e.Cells[6].Text)) 
    .Select(e => e.RowIndex); 

foreach(var blank in blanks) 
    GridView1.DeleteRow(blank); 
0

Почему бы не просто спрятать строку?

private void GridView_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.Cells[6].Text == "") 
     e.Row.Visible = false; 
} 

Кроме того, почему вы не скрываете свои записи в событии привязки данных, а не итерации по строкам?

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