2015-05-16 27 views
6

Tôi đang cố chèn 5 bản ghi vào bảng cơ sở dữ liệu SQL Server từ DataGridView bằng C#.Cách lưu trữ nhiều bản ghi trong SQL Server bằng cách sử dụng DataGridView

Từ mã của tôi, nó lấy đầu vào của một số bản ghi nhưng chỉ chèn bản ghi đầu tiên vào cơ sở dữ liệu. Ai có thể giúp tôi để lưu 5 hồ sơ trong cơ sở dữ liệu bằng một nhấp chuột duy nhất của nút lưu?

Đây là mã của tôi:

DataSet ds = new DataSet(); 

    SqlConnection cs = new SqlConnection(@"Data Source=DELL-PC;Initial Catalog=Image_DB;Integrated Security=True"); 

    SqlDataAdapter da = new SqlDataAdapter(); 

    SqlCommand cmd = new SqlCommand(); 

    BindingSource Input = new BindingSource(); 
    DataView dview = new DataView(); 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     //create a DataGridView Image Column 
     DataGridViewImageColumn dgvImage = new DataGridViewImageColumn(); 
     //set a header test to DataGridView Image Column 
     dgvImage.HeaderText = "Images"; 
     dgvImage.ImageLayout = DataGridViewImageCellLayout.Stretch; 

     DataGridViewTextBoxColumn dgvId = new DataGridViewTextBoxColumn(); 
     dgvId.HeaderText = "ID"; 

     DataGridViewTextBoxColumn dgvName = new DataGridViewTextBoxColumn(); 
     dgvName.HeaderText = "Name"; 
     dataGridView1.Columns.Add(dgvId); 
     dataGridView1.Columns.Add(dgvName); 
     dataGridView1.Columns.Add(dgvImage); 
     dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 
     dataGridView1.RowTemplate.Height = 120; 
     dataGridView1.AllowUserToAddRows = false; 
    } 

    // button add data to dataGridView 
    // insert image from pictureBox to dataGridView 
    private void btn_Add_Click(object sender, EventArgs e) 
    { 
     MemoryStream ms = new MemoryStream(); 
     pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat); 
     byte[] img = ms.ToArray(); 
     dataGridView1.Rows.Add(txt_UserID.Text, txt_Name.Text, img); 
    } 

    // browse image in pictureBox1 Click 
    private void pictureBox1_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog opf = new OpenFileDialog(); 
     opf.Filter = "Choose Image(*.jpg; *.png; *.gif)|*.jpg; *.png; *.gif"; 
     if (opf.ShowDialog() == DialogResult.OK) 
     { 
      pictureBox1.Image = Image.FromFile(opf.FileName); 
     } 
    } 

    private void btn_Save_Click(object sender, EventArgs e) 
    { 
     for (int i = 5; i < dataGridView1.Rows.Count; i++) 
     { 
      string col1 = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
      string col2 = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
      string col3 = dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 

      string insert_sql = "INSERT INTO Input(UserID, UserName, PassImage) VALUES ('" + col1 + "','" + col2 + "','" + col3 + "')"; 

      this.getcom(insert_sql); 
     } 

     MessageBox.Show("Record Added"); 
    } 

    public SqlConnection GetSqlConnection() //connection function 
    { 
     string str_sqlcon = "Data Source=DELL-PC;Initial Catalog=Image_DB;Integrated Security=True"; 

     SqlConnection mycon = new SqlConnection(str_sqlcon); 
     mycon.Open(); 

     return mycon; 
    } 

    public void getcom(string sqlstr) //function for adding rows 
    { 
     SqlConnection sqlcon = this.GetSqlConnection(); // Watch out same string type as GetSQLConnection function 
     SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon); 
     sqlcom.ExecuteNonQuery(); 
     sqlcom.Dispose(); 
     sqlcon.Close(); 
     sqlcon.Dispose(); 
    } 

Trả lời

5

Vấn đề là trong vòng này "cho" vòng lặp, bạn có không sử dụng số i trong vòng lặp for của bạn.

tốt hơn hãy thử cái này.

for (int i = 0; i < dataGridView1.Rows.Count; i++) 
 
{ 
 
    string col1 = dataGridView1.Rows[i].Cells[0].Value.ToString(); 
 
    string col2 = dataGridView1.Rows[i].Cells[1].Value.ToString(); 
 
    string col3 = dataGridView1.Rows[i].Cells[2].Value.ToString(); 
 
    string insert_sql = "INSERT INTO Input(UserID, UserName, PassImage) VALUES ('" + col1 + "','" + col2 + "','" + col3 + "')"; 
 
    this.getcom(insert_sql); 
 
} 
 
             

thay đổi logic mã, nếu cần thiết.

+0

Cảm ơn rất nhiều! nó làm việc .... – Sumi

+0

Bạn có thể nói, làm thế nào tôi có thể hạn chế người dùng cung cấp cho đầu vào chính xác 5 hồ sơ nếu không một tin nhắn sẽ được tạo ra. – Sumi

+0

thực hiện thay đổi trong ** cho vòng lặp **, -> 'cho (i = 0; i <6; i ++)' do đó, điều này sẽ chỉ chèn 5 bản ghi. Nếu bạn muốn hiển thị thông báo, hãy sử dụng các sự kiện khách hàng datagridview hoặc thử logic trong ** if ** 'if (dataGridView1.Rows.count> 5)'. @ Sumi – Balaji

4
for (int i = 5; i < dataGridView1.Rows.Count; i++) 

thay đổi này để for (int i = 0; i < dataGridView1.Rows.Count; i++)

Bạn đang chuyển nhượng 5-i như vậy sau khi một chèn nó sẽ đi ra khỏi vòng lặp vì i sẽ trở thành 6.

cũng bao gồm 'i' trong khi xác định datagridview row..else nó sẽ luôn luôn trỏ đến một hàng và chèn 5 hàng nhưng cùng một giá trị

Các vấn đề liên quan