2010-04-29 5 views
2

j'ai datatable table commeDatatable et Datagridview

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

Et j'affichons cette valeur dans le datagridview par code

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

Maintenant, je ne veux pas afficher la ligne qui a une certaine valeur manquante Si comme je le ferai alors le datagridview ressemblera

1 abc kfjskl 798798 
2 bcd kjdsfl 808909 

Comment puis-je faire cette ?

Répondre

1

Cela va faire ce que vous avez besoin (je pense):

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

Il faudra peut-être modifié pour vérifier les valeurs NULL dans Table.Rows[i][i] (en plus de vérifier simplement des valeurs de chaîne vide).

0

Je ne sais pas si je comprends bien, mais vous pouvez éventuellement utiliser DataTable.Select pour filtrer toutes les lignes dont les valeurs sont manquantes avant de les insérer dans la grille de données. Sinon, au lieu d'utiliser une boucle for pour les lignes, utilisez simplement une boucle foreach sur les lignes de la table et ajoutez les lignes une par une avec dataGridView.Rows.Add(newRow).

+0

@ ho, Comment filtrer les lignes sans valeurs manquantes? – Harikrishna

+0

@ ho, Quel est l'avantage d'utiliser foreach boucle ici? – Harikrishna

+0

Si vous utilisez un foreach (ou pour, mais je pense qu'un foreach est plus net) sur les lignes de la Table plutôt que sur les lignes de DataGRidView, vous n'avez pas besoin d'ajouter les lignes à la grille à l'avance. les lignes que vous ne voulez pas. –

1

Je pense que votre meilleur choix est d'utiliser un DataView entre le DataGridView et le DataTable. DataView vous permet de filtrer les valeurs à l'aide de et d'expression sans affecter le DataTable d'origine. Pour filtrer toutes les colonnes vides, vous pouvez créer une vue avec cette expression:

DataView view = new DataView(table); 

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

La fonction ISNULL remplace une valeur de colonne whit la chaîne spécifiée, si la valeur de la colonne est nulle. Ainsi, le filtre remplace toutes les valeurs NULL par des chaînes vides, excluant ainsi les colonnes NULL ou vides.

Ensuite, vous pouvez utiliser ce point de vue des valeurs assing au réseau, au lieu d'utiliser 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(); 
    } 
} 

également au lieu d'utiliser des boucles pour fournir des valeurs à la grille, vous pouvez simplement utiliser la liaison de données. C'est beaucoup plus simple:

dataGridView1.DataSource = view; 

Espérons que ça aide!

+0

Vous pouvez voir une documentation d'expression valide ici: http://msdn.microsoft.com/es-es/library/system.data.datacolumn.expression(v=VS.80).aspx –

+0

mais chaque fois le nom des champs est différent. – Harikrishna

+0

+1 pour l'utilisation de DataView et de la liaison de données. – Ken

Questions connexes