2017-09-22 7 views
0

良い日。DataGridviewの最初の列に文字列が含まれているかどうかを確認する

私は、データグラムビューにID番号を入力するコードを書いています。追加する前に、 "名前"が既にdatagridviewに存在するかどうかをチェックする必要があります。そうであれば、それはそれをdatagridviewに追加せず、メッセージボックスを表示します。

以下
Name  | ID Number 
Thomas | 10000000 
Cesar | 10000001 
Kathrina | 10000002 

は、私が働いているコードです:以下

はどのように見えるかのDataGridViewのアイテムです。文字列s1とs2はまだ "名前"列に "Thomas"が入っていても、まだデータグリッドビューにコピーされています。

string s1 = "Thomas"; 
string s2 = "10000003"; 

if (dataGridView1 != null) 
{ 
     foreach (DataGridViewRow item in dataGridView1.Rows) 
     { 
      if (item.Cells[0].Value != null && item.Cells[0].Value.ToString() != s1) 
      { 
       string newline = s1 + "," + s2; 
       string[] values = newline.Split(','); 

       this.dataGridView1.Rows.Add(values); 
      } 
      else 
      { 
       MessageBox.Show("Name already exists in the database"); 
      } 
     } 
} 

私のコードには何がないのか分かりますか?

いつも助けて頂き、ありがとうございます。

+0

ここで、 'newline'は定義されていますか? –

+0

"item.Cells [0] .Value.ToString()"の結果をデバッガにチェックインします。これが問題ない場合は、デバッガで "item.Cells [0] .Value.ToString()!= s1"の結果もチェックインしてください。これが問題でない場合は、もう一度見てください:スペースはありますか?値をコピーし(値を右クリックしてコピー)、これをメモ帳にコピーします。これはOKですか? "(item.Cells [0] .Value.ToString()。Equals(s1、StringComparison.InvariantCultureIgnoreCase)))" –

+0

こんにちはRufusのようなcomparsionを試してください。私はそれを忘れて申し訳ありません。私は今すぐ追加しました。ありがとうございました。 – thompogi

答えて

3

最初に、最初の列が「トーマス」に等しく、レコードが重複する場合は、DataGridViewの各行をチェックしています。例えば

、あなたが持っている:あなたのループの最初の繰り返しで

Name  | ID Number 
---------+---------- 
Cesar | 10000001 
Thomas | 10000000 
Kathrina | 10000002 

Cesar, 10000001)、あなたはすでにトーマスに新しい行が追加されます! column[0]nullではないため、 'Thomas'と等しくないためです。見る?ここにあなたの最初の間違いがあります。

次に、ffを考えます。データ:

Name  | ID Number 
---------+---------- 
Thomas | 10000000 
Cesar | 10000001 
Kathrina | 10000002 

それが偽のあなたの最初の反復では、それはまだ偽だろう次の反復していきますので、別の行を追加します場合でも!

しかし、あなたのDataGridViewに「Thomas」がない場合はどうなりますか?

Name  | ID Number 
---------+---------- 
Cesar | 10000001 
Tymothy | 10000000 
Kathrina | 10000002 

すべての繰り返しが条件に合格し、「トーマス」の3つの行が表示されます。

問題は、行ごとにチェックしていることです。すべての行を繰り返した後、条件をチェックする必要があります。変数bool foundが必要です。これは、繰り返しの完了後にチェックされます。

string s1 = "Thomas"; 
string s2 = "10000003"; 
bool found = false; 

if (dataGridView1 != null) { 
    foreach(DataGridViewRow item in dataGridView1.Rows) { 
    if (item.Cells[0].Value != null && item.Cells[0].Value.ToString() == s1) { 
     found = true; 
     break; //stop iteration here since it's already found 
    } 
    } 
    if (!found) { 
    string newline = s1 + "," + s2; 
    string[] values = newline.Split(','); 
    this.dataGridView1.Rows.Add(values); 
    } 
    else 
    MessageBox.Show("Name already exists in the database"); 
} 
0

非常にありがとうございます。あなたのコードは、私のコードが自分の作業をしていたものと比べて非常にきれいです。本当にすべての助けに感謝します。乾杯!!!

  if (dataGridView1 != null) 
      { 
       foreach (DataGridViewRow item in dataGridView1.Rows) 
       { 
        if (item.Cells[0].Value != null && item.Cells[0].Value.ToString() == s1) 
        { 
         label6.Text = "True";        
         break; 
        } 
        else 
        { 
         label6.Text = "False"; 
        } 
       }       
      } 

      if (label6.Text == "False") 
      { 
       string newline = s1 + "," + s2; 
       string[] values = newline.Split(','); 
       this.dataGridView1.Rows.Add(values); 
      } 
関連する問題