2010-04-29 7 views
2

У меня есть DataTable table какDatatable и DataGridView

id name address phoneno 
1 abc kfjskl 798798 
2 bcd kjdsfl 808909 
3    899009 
    fjsh kjllkjl 
5 jfkd 

И я отображая это значение в DataGridView по коду

dataGridView1.ColumnCount = Table.Columns.Count; 
dataGridView1.RowCount = Table.Rows.Count; 
for (int i = 0; i < dataGridView1.RowCount; i++) 
{ 
    for (int j = 0; j < dataGridView1.ColumnCount; j++) 
    { 
     dataGridView1[j, i].Value = Table.Rows[i][j].ToString(); 
    } 
} 

Теперь я не хочу, чтобы отобразить строку, которая имеет некоторое отсутствующее значение например, если я это сделаю, то datagridview будет выглядеть как

1 abc kfjskl 798798 
2 bcd kjdsfl 808909 

Как это сделать?

ответ

1

Это будет делать то, что вам нужно (я думаю):

dataGridView1.ColumnCount = Table.Columns.Count; 
for (int i = 0; i < Table.Rows.Count; i++) 
{ 
    bool valueMissing = false; 
    DataGridViewRow row = new DataGridViewRow(); 
    for (int j = 0; j < dataGridView1.ColumnCount; j++) 
    { 
     if (Table.Rows[i][j].ToString() == "") 
     { 
      valueMissing = true; 
      break; 
     } 
     else 
     { 
      row.Cells[j].Value = Table.Rows[i][j]; 
     } 
    } 
    if (!valueMissing) 
    { 
     dataGridView1.Rows.Add(row); 
    } 
} 

Это, возможно, потребуется изменить, чтобы проверить наличие нулевых значений в Table.Rows[i][i] (в дополнение к только проверка пустых строковых значений).

0

Я не уверен, что я понимаю, но вы можете использовать DataTable.Select для фильтрации любых строк с отсутствующими значениями, прежде чем вставлять их в datagrid.

Или иначе, вместо использования цикла for для строк, просто используйте цикл foreach в строках таблицы и добавьте строки один за другим с помощью dataGridView.Rows.Add(newRow).

+0

@ ho, Как фильтровать строки без пропущенных значений? – Harikrishna

+0

@ ho, В чем преимущество использования цикла foreach здесь? – Harikrishna

+0

Если вы используете foreach (или для, но я думаю, что foreach является более аккуратным) в строках таблицы, а не в строках в DataGRidView, вам не нужно добавлять строки в сетку заранее, и поэтому можно отфильтровать строки, которые вы не хотите. –

1

Я думаю, что ваш лучший выбор - использовать DataView между DataGridView и DataTable. DataView позволяет вам фильтровать значения с использованием и выражением без ущерба для исходного DataTable. Для того, чтобы отфильтровать все пустые столбцы, которые вы можете создать представление с этим выражением:

DataView view = new DataView(table); 

view.RowFilter = "ISNULL(id, '') <> '' AND ISNULL(name, '') <> '' AND ISNULL(address, '') <> '' AND ISNULL(phoneno, '') <> ''"; 

Функция ISNULL заменяет значение столбца йота указанную строку, если значение столбца равно нулю. Таким образом, фильтр заменяет каждое значение NULL пустыми строками, поэтому исключая столбцы NULL или Empty.

Затем вы можете использовать это представление для Ассинга значения сетки, вместо использования DataTable:

dataGridView1.ColumnCount = view.Columns.Count; 
dataGridView1.RowCount = view.Rows.Count; 
for (int i = 0; i < dataGridView1.RowCount; i++) 
{ 
    for (int j = 0; j < dataGridView1.ColumnCount; j++) 
    { 
    dataGridView1[j, i].Value = view.Rows[i][j].ToString(); 
    } 
} 

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

dataGridView1.DataSource = view; 

Надеюсь, это поможет!

+0

Здесь вы можете увидеть документацию по действительным выражениям: http://msdn.microsoft.com/es-es/library/system.data.datacolumn.expression(v=VS.80).aspx –

+0

, но каждый раз имя поля отличается. – Harikrishna

+0

+1 для использования DataView и привязки данных. – Ken

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