2015-05-16 26 views
6

kullanarak SQL Server'da birden çok kayıt depolamak için C# kullanarak DataGridView bir SQL Server veritabanı tablosuna 5 kayıt eklemek çalışıyorum.DataGridView

Kodumdan çeşitli kayıtların girişini alır, ancak veritabanına yalnızca ilk kaydı ekler. Herhangi bir kişi kaydetme düğmesine tek bir tıklama ile 5 kayıt veritabanında kaydetmeme yardım edebilir mi? Öyle bir sonra i için 5 atamayacaksanız for (int i = 0; i < dataGridView1.Rows.Count; i++)

için

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

cevap

5

, sen olacaktır row..else datagridview belirtilirken 'i' dahil for döngüsünde i kullanmıyor. Bunu daha iyi deneyin.

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

değişiklik kod mantığı

, gerekirse.

+0

Çok teşekkürler! İşe yaradı .... – Sumi

+0

Lütfen, kullanıcının bir mesaj oluşturması için 5 kaydı tam olarak girmesini nasıl kısıtlayabilirim? – Sumi

+0

, ** for döngüsündeki değişikliği yapar, -> 'for (i = 0; i <6; i ++)' dır, bu sayede sadece 5 kayıt ekleyecektir. Eğer mesaj göstermek için datagridview client olaylarını kullanın veya eğer ** eğer ** eğer (dataGridView1.Rows.count> 5) '. – Balaji

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

değişiklik bu i6 olacak çünkü döngünün çıkacaktır takın:

İşte benim kodudur.

Ayrıca sürekli bir satıra işaret ve 5 satır eklemek fakat aynı değere sahip problemi döngü "için" bu içindedir