2012-01-18 14 views
0

私はただ1つの列を持つグリッドビューを持っています。グリッドビューの内容をデータベーステーブルに格納する方法

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     SqlConnection con = new SqlConnection(strConnString); 
     con.Open(); 

     for (int i = 0; i < GridView1.Rows.Count; i++) 
     { 
      string Users = GridView1.Rows[i].Cells[0].Text; 

      string strQuery = "insert into Table1 (FileName, DateTimeUploaded, Type, Username)" + 
      " values(@FileName, @DateTimeUploaded, @Type, @Username)"; 
      SqlCommand cmd = new SqlCommand(strQuery); 

      cmd.Parameters.AddWithValue("@FileName", datalink); 
      cmd.Parameters.AddWithValue("@Type", ext); 
      cmd.Parameters.AddWithValue("@DateTimeUploaded", DateTime.Now); 
      cmd.Parameters.AddWithValue("@Username", Users); 

      cmd.CommandType = CommandType.Text; 
      cmd.Connection = con; 
      cmd.ExecuteNonQuery(); 

     } 
     con.Close(); 
     con.Dispose(); 

      } 

このグリッドビューに2つの行がある場合、最初の行はデータベースに2回格納されます。 gridviewに3つの行がある場合、最初の行は3回格納されます。これをどうすれば解決できますか?

+0

あなたは何をしたいかもしれませんあまりにも多くのことをする前に、 ".Net data binding"を検索してください。あなたはあなたのために必要なすべてをしている何かを見つけるかもしれません... –

+0

コード内の "e.ItemType"をチェックする必要があります。 – Praveen

答えて

1

説明:

あなたのGridViewのRowDataBoundイベント内のデータベースにデータを挿入している - これはのDataRowがバインドされているすべての時間を実行しています!これは、あなたが使用してすべての行accross各時間をループしているという事実と一緒に:

for (int i = 0; i < GridView1.Rows.Count; i++) { // inserting record from each row } 

あなたの行は複数の行がバインドされているとして複数回挿入しようとしていることを意味します。 forループを削除して、代わりにe.Row.Cells[0]を使用して、現在バインドされている行データを参照して挿入する必要があります。おそらくだけでDataRowをチェックする

string Users = e.Row.Cells[0].Text; 

あなたの操作はフッター/ヘッダー行では発生しませんのでなど

新しいコード:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     SqlConnection con = new SqlConnection(strConnString); 
     con.Open(); 

     string Users = e.Row.Cells[0].Text; // current row being bound 

     string strQuery = "insert into Table1 (FileName, DateTimeUploaded, Type, Username)" + 
     " values(@FileName, @DateTimeUploaded, @Type, @Username)"; 
     SqlCommand cmd = new SqlCommand(strQuery); 

     cmd.Parameters.AddWithValue("@FileName", datalink); 
     cmd.Parameters.AddWithValue("@Type", ext); 
     cmd.Parameters.AddWithValue("@DateTimeUploaded", DateTime.Now); 
     cmd.Parameters.AddWithValue("@Username", Users); 

     cmd.CommandType = CommandType.Text; 
     cmd.Connection = con; 
     cmd.ExecuteNonQuery(); 

     con.Close(); 
     con.Dispose(); 
    } 
} 
関連する問題