C#Datagridview更新和删除 [英] C# Datagridview update and delete

查看:42
本文介绍了C#Datagridview更新和删除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个gridview,需要编辑更新和从datagrid和我的sql服务器中删除.

问题出在我运行表单并想在datagridview中删除一行时删除了它,从而导致错误索引超出范围.

这是我的表格代码

I have a gridview that needs to edit update and delete from datagrid and from my sql server.

The problem is with my delete when i run my form and want to delete a row in my datagridview it gives an error index out of range.

Here is my form code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Configuration;
using System.Data.SqlClient;
using System.Windows.Forms.PropertyGridInternal;


namespace WindowsFormsApplication1
{
    public partial class Form5 : Form
    {
        SqlConnection con = new SqlConnection(@"Data Source=Admin-PC\SQLEXPRESS;Initial                             Catalog=Couriers;Integrated Security=True");

        public Form5()
        {
            InitializeComponent();
            FormBorderStyle = FormBorderStyle.None;
            WindowState = FormWindowState.Maximized;
            TopMost = true;
            Bind();
            
        }

        private void Clear()
        {
            textBox1.Text = string.Empty;
            comboBox1.Text = string.Empty;
            textBox7.Text = string.Empty;
            textBox6.Text = string.Empty;
            comboBox2.Text = string.Empty;
            textBox4.Text = string.Empty;
            textBox13.Text = string.Empty;
            textBox2.Text = string.Empty;
            textBox11.Text = string.Empty;
            textBox9.Text = string.Empty;
            textBox14.Text = string.Empty;
        }
        //save
        private void button6_Click(object sender, EventArgs e)
        {
            con.Open();
           SqlCommand cmd = new SqlCommand("Insert Into Waybills set (WaybillNumber,SenderName,SenderAdress,SenderContact,ReceiverName,ReceiverAdress,ReceiverContact,UnitDescription,UnitWeight,Price,Payee) Values (@WaybillNumber,@SenderName,@SenderAdress,@SenderContact,@ReceiverName,@ReceiverAdress,@ReceiverContact,@UnitDescription,@UnitWeight,@Price,@Payee)", con);
           cmd.Parameters.AddWithValue("@WaybillNumber", textBox1.Text);
           cmd.Parameters.AddWithValue("@SenderName", comboBox1.Text);
           cmd.Parameters.AddWithValue("@SenderAddress", textBox7.Text);
           cmd.Parameters.AddWithValue("@SenderContact", textBox7.Text);
           cmd.Parameters.AddWithValue("@ReceiverName", comboBox2.Text);
           cmd.Parameters.AddWithValue("@ReceiverAddress", textBox4.Text);
           cmd.Parameters.AddWithValue("@ReceiverContact", textBox13.Text);
           cmd.Parameters.AddWithValue("@UnitDescription", textBox2.Text);
           cmd.Parameters.AddWithValue("@UnitWeight", textBox11.Text);
           cmd.Parameters.AddWithValue("@Price", textBox9.Text);
           cmd.Parameters.AddWithValue("@Payee", textBox14.Text);

           cmd.ExecuteNonQuery();
           con.Close();
           MessageBox.Show("nEW DATA INSERTED");
           Bind();
           Clear();
           dataGridView1.Refresh();
       }


        private void Bind()
        {
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter("Select * from Waybills", con);
            DataTable dt = new DataTable();
            da.Fill(dt);
            dataGridView1.DataSource = dt;
            con.Close();
        }

       

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void Form5_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'couriersDataSet2.Waybills' table. You can move, or remove it, as needed.
            this.waybillsTableAdapter1.Fill(this.couriersDataSet2.Waybills);
            

        }
        //view data
        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(@"Data Source=Admin-PC\SQLEXPRESS;Initial Catalog=Couriers;Integrated Security=True");
            con.Open();
       
            SqlDataAdapter ad = new SqlDataAdapter("select * from Waybills where WaybillNumber like '%" + textBox5.Text + "%'", con);
            SqlCommandBuilder cb = new SqlCommandBuilder(ad);
            DataSet ds = new DataSet();
            ds.Clear();
            ad.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];
            if (textBox5.Text == "" || ds.Tables[0].Rows.Count == 0)
            {
                dataGridView1.Visible = false;
            }
            else
            {
                dataGridView1.Visible = true;
                con.Close();
            }
            
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.ShowDialog();
            this.Close();
        }

        private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {

        }
        //edit
        private void button3_Click(object sender, EventArgs e)
        {
            int i;
            i = dataGridView1.SelectedCells[0].RowIndex;
            textBox1.Text = dataGridView1.Rows[i].Cells[0].Value.ToString();
            comboBox1.Text = dataGridView1.Rows[i].Cells[1].Value.ToString();
            textBox7.Text = dataGridView1.Rows[i].Cells[2].Value.ToString();
            textBox6.Text = dataGridView1.Rows[i].Cells[3].Value.ToString();
            comboBox2.Text = dataGridView1.Rows[i].Cells[4].Value.ToString();
            textBox4.Text = dataGridView1.Rows[i].Cells[5].Value.ToString();
            textBox13.Text = dataGridView1.Rows[i].Cells[6].Value.ToString();
            textBox2.Text = dataGridView1.Rows[i].Cells[7].Value.ToString();
            textBox11.Text = dataGridView1.Rows[i].Cells[8].Value.ToString();
            textBox9.Text = dataGridView1.Rows[i].Cells[9].Value.ToString();
            textBox14.Text = dataGridView1.Rows[i].Cells[10].Value.ToString();
        }
        //delete rows
        private void button4_Click(object sender, EventArgs e)
        {
            SqlCommand delcmd = new SqlCommand();
            if (dataGridView1.Rows.Count > 1 && dataGridView1.SelectedRows[0].Index != dataGridView1.Rows.Count - 1)
            {
                delcmd.CommandText = " DELETE FROM Waybills WHERE WaybillNumber=" + dataGridView1.SelectedRows[0].Cells[0].Value.ToString() + "";
                con.Open();
                delcmd.Connection = con;
                delcmd.ExecuteNonQuery();
                con.Close();
                dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
                MessageBox.Show("Waybill Deleted");
            }
            Bind();

        }
        //update
        private void button5_Click(object sender, EventArgs e)
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("UPDATE Waybills set WaybillNumber = @WaybillNumber, SenderName = @SenderName, SenderAddress = @SenderAddress, SenderContact = @SenderContact, ReceiverName = @ReceiverName, ReceiverAddress = @ReceiverAddress, ReceiverContact = @ReceiverContact, UnitDescription = @UnitDescription, UnitWeight = @UnitWeight, Price = @Price, Payee = @Payee Where(WaybillNumber=@WaybillNumber)", con);

            cmd.Parameters.AddWithValue("@WaybillNumber", textBox1.Text);
            cmd.Parameters.AddWithValue("@SenderName", comboBox1.Text);
            cmd.Parameters.AddWithValue("@SenderAddress", textBox7.Text);
            cmd.Parameters.AddWithValue("@SenderContact", textBox7.Text);
            cmd.Parameters.AddWithValue("@ReceiverName", comboBox2.Text);
            cmd.Parameters.AddWithValue("@ReceiverAddress", textBox4.Text);
            cmd.Parameters.AddWithValue("@ReceiverContact", textBox13.Text);
            cmd.Parameters.AddWithValue("@UnitDescription", textBox2.Text);
            cmd.Parameters.AddWithValue("@UnitWeight", textBox11.Text);
            cmd.Parameters.AddWithValue("@Price", textBox9.Text);
            cmd.Parameters.AddWithValue("@Payee", textBox14.Text);
            
            cmd.ExecuteNonQuery();
            MessageBox.Show("updated");
            con.Close();
            Bind();
            Clear();
        }

    }
}



有人可以告诉我我的问题在哪里吗



Can someone tell me where my problem is

推荐答案

检查所选行的值不等于-1
Check selected row not eqal to -1
private void button4_Click(object sender, EventArgs e)
       {
if(dataGridView1.SelectedRows[0].Index != -1)
 {
           SqlCommand delcmd = new SqlCommand();
           if (dataGridView1.Rows.Count > 1 && dataGridView1.SelectedRows[0].Index != dataGridView1.Rows.Count - 1)
           {
               delcmd.CommandText = " DELETE FROM Waybills WHERE WaybillNumber=" + dataGridView1.SelectedRows[0].Cells[0].Value.ToString() + "";
               con.Open();
               delcmd.Connection = con;
               delcmd.ExecuteNonQuery();
               con.Close();
               dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
               MessageBox.Show("Waybill Deleted");
           }
           Bind();
    }

 }


问题出在这一行..
The problem is in this line..
if (dataGridView1.Rows.Count > 1 && dataGridView1.SelectedRows[0].Index != dataGridView1.Rows.Count - 1)


尝试..


try with..

if (dataGridView1.Rows.Count >= 1 && dataGridView1.SelectedRows[0].Index == dataGridView1.Rows.Count - 1)


嘿,我尝试将代码更改为if(dataGridView1.Rows.Count> = 1 && dataGridView1.SelectedRows [0 ] .Index == dataGridView1.Rows.Count-1)现在,当我按Delete按钮时,该程序只是继续运行,它甚至不想退出应用程序.请帮助
Hey i tried changing my code to if (dataGridView1.Rows.Count >= 1 && dataGridView1.SelectedRows[0].Index == dataGridView1.Rows.Count - 1) now the program just keeps on running when i press delete button, it doesnt even want to exit application. please help


这篇关于C#Datagridview更新和删除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆