Datatable и Datagridview - PullRequest
       20

Datatable и Datagridview

2 голосов
/ 29 апреля 2010

У меня есть дата table как

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

И я отображаю это значение в сетке данных по коду

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();
    }
}

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

 1  abc  kfjskl  798798
 2  bcd  kjdsfl  808909

Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 29 апреля 2010

Я думаю, что ваш лучший выбор - использовать 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 пустыми строками, исключая пустые или пустые столбцы.

Затем вы можете использовать это представление для передачи значений в сетку вместо использования данных:

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;

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

1 голос
/ 29 апреля 2010

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

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 голосов
/ 29 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...