3

datagridからデータベースにデータを保存したいので、次のコードを使用しました。

 foreach (DataGridViewRow r in dataGridView_displaycount.Rows)
        {
            SqlCommand cmd = new SqlCommand("insert into StocktransferlocationDetails(date,stocktransferlocation,Itemcode,Count,Description) values(@date,@stocktransferlocation,@Itemcode,@Count,@Description) ", con);

            cmd.Parameters.AddWithValue("@date",System.DateTime.Now);
            cmd.Parameters.AddWithValue("@stocktransferlocation", comboBox_locationfrom.SelectedText+"-"+comboBox_locationto.SelectedText);
            cmd.Parameters.AddWithValue("@Itemcode", r.Cells[1].Value.ToString());
            cmd.Parameters.AddWithValue("@Count", r.Cells[2].Value.ToString());
            cmd.Parameters.AddWithValue("@Description", r.Cells[3].Value.ToString());
            cmd.ExecuteNonQuery();
        }

ここで私の問題は、データグリッドに最後に空の行が含まれていることです。だから私はデータを書きます、そしてそれが空の行になるとそれは私にエラーを投げます。

4

4 に答える 4

2

ここでforeachループを使用するのはなぜですか?

次のようなforループを使用します。

for(int i=0; i<dataGridView_displaycount.Rows.Count-1; i++)
{
   //Your code
}

これは、他のコード変更ではなく、問題を解決するための簡単な解決策になるはずです。

更新:グリッドビューデータをデータベースに追加します。

for(int i=0; i< dataGridView_displaycount.Rows.Count-1;i++)
 {
    Strquery= @"Insert into StocktransferlocationDetails(date,stocktransferlocation,....) values (" 
                + System.DateTime.Now +", "+ comboBox_locationfrom.SelectedText+"-"+comboBox_locationto.SelectedText +"," 
                + dataGridView_displaycount.Rows[i].Cells[1].Value +".......);";
    cmd.CommandText = Strquery;
    cmd.ExecuteNonQuery();
 }
于 2012-10-08T07:05:39.167 に答える
0

あなたはこのように使うことができます:

For(int row=0;row<datagridview.rows.count;row++)

{
//Do Work
}
于 2012-10-08T06:51:21.803 に答える
0

以下のコードに示すように、nullをチェックしてみてください。

foreach (DataGridViewRow r in dataGridView_displaycount.Rows)
{
    SqlCommand cmd = new SqlCommand("insert into StocktransferlocationDetails(date,stocktransferlocation,Itemcode,Count,Description) values(@date,@stocktransferlocation,@Itemcode,@Count,@Description) ", con);

    cmd.Parameters.AddWithValue("@date", System.DateTime.Now);
    cmd.Parameters.AddWithValue("@stocktransferlocation", comboBox_locationfrom.SelectedText + "-" + comboBox_locationto.SelectedText);

    if (r.Cells[1] != null && r.Cells[1].Value != null)
        cmd.Parameters.AddWithValue("@Itemcode", r.Cells[1].Value.ToString());
    if (r.Cells[2] != null && r.Cells[2].Value != null)
        cmd.Parameters.AddWithValue("@Count", r.Cells[2].Value.ToString());
    if (r.Cells[3] != null && r.Cells[3].Value != null)
        cmd.Parameters.AddWithValue("@Description", r.Cells[3].Value.ToString());

    cmd.ExecuteNonQuery();
}
于 2012-10-08T07:05:14.563 に答える
0

あなたは最後の行のためにこれを試すことができます:

cmd.Parameters.AddWithValue("@Description", r.Cells[3].Value ?? DBNull.Value); 
于 2012-10-08T07:07:43.143 に答える