winform窗体——datagridview控件及通过此控件中实现增删改查

这都不是事 这都不是事     2022-08-03     458

关键词:

DataGridView:显示数据表,通过此控件中可以实现连接数据库,实现数据的增删改查

一、后台数据绑定:
    
List<xxx> list = new List<xxx>();
      dataGridView1.DataSource = list;
      //设置不自动生成列,此属性在属性面板中没有
      dataGridView1.AutoGenerateColumns = false;
      //取消加载默认选中第一行
      dataGridView1.ClearSelection();

二、前台:
      小三角箭头,取消可编辑,添加,删除功能;
      Columns集合属性中,添加列
      HeaderText中设置显示的文本
      DataPropertyName设置绑定的字段名或数据库列名
      SelectionMode --设置选择方式,FullRowSelect只能选中行
      MultiSelect --是否可以选中多行内容

三、取值:
      取出选中的单元格的值:
      dataGridView1.SelectedCells中放着全部选中的单元格
      if(dataGridView1.SelectedCells.Count > 0)
      {
              MessageBox.Show(dataGridView1.SelectedCells[0].Value.ToString());
      }
      取出选中的行内容:
      if(dataGridView1.SelectedRows.Count > 0)
      {
             MessageBox.Show(dataGridView1.SelectedRows[0].Cells[0].ToString());
      }
      获取用于填充行绑定的对象:
      //行对象使用属性:DataBoundItem
      student sss = dataGridView1.SelectedRows[0].DataBoundItem as student;

四、删除加确认
      MessageBoxButtons btn = MessageBoxButtons.YesNoCancel;
      if (MessageBox.Show("确定要删除么?", "删除数据", btn) == DialogResult.Yes)
      {
      }

五、多条件查询

如果用户什么都不输入,或者文本框是空,这时候是查询所有

//做两个恒成立的条件
           
string tj1 = " 1=1 ";
            string tj2 = " 1=1 ";

//根据用户输入来改变条件
//如果用户输入了姓名
            if (name != "")
            {
                tj1 = " Name like @name ";
            }

//如果用户输入了民族
            if (nation != "")
            {
                tj2 = " Nation = @nation ";
            }

//拼接成完整条件
            string ztj = " where "+tj1+" and "+tj2;

 

六、例子

通过控件DataGridView,连接数据库(表Student和表Sclass),实现对Student表的增删改查

 

 代码区:

数据连接类:

namespace WindowsFormsApplication2
{
    public class DBConnect
    {
        private static string connstring = "server=.;database=xuesheng;user=sa;pwd=123";
        public static SqlConnection Conn
        {
            get
            {
                return new SqlConnection(connstring);
            }
        }
    }
}
DBConnect.cs

实体类:

namespace WindowsFormsApplication2
{
    public class Student
    {
        private string sno;

        public string Sno
        {
            get { return sno; }
            set { sno = value; }
        }
        private string sname;

        public string Sname
        {
            get { return sname; }
            set { sname = value; }
        }
        private string ssex;

        public string Ssex
        {
            get { return ssex; }
            set { ssex = value; }
        }
        private DateTime sbirthday;

        public DateTime Sbirthday
        {
            get { return sbirthday; }
            set { sbirthday = value; }
        }
        private string sclass;

        public string Sclass
        {
            get { return sclass; }
            set { sclass = value; }
        }
        private string SclassName
        {
            get
            {
                SclassDA da = new SclassDA();
                return da.SclassName(this.sclass);
            }
        }
    }
}
Student.cs

 

namespace WindowsFormsApplication2
{
    public class Sclass
    {
        private string cno;

        public string Cno
        {
            get { return cno; }
            set { cno = value; }
        }

        
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }
}
Sclass.cs

数据访问类:

namespace WindowsFormsApplication2
{
    public class StudentDA
    {
        private SqlConnection _conn;
        private SqlCommand _cmd;
        private SqlDataReader _dr;
        public StudentDA()
        {
            _conn = DBConnect.Conn;
            _cmd = _conn.CreateCommand();
        }
        //查询
        public List<Student> Select()
        {
            List<Student> list = new List<Student>();
            _cmd.CommandText = "select * from Student";
            _conn.Open();

            _dr = _cmd.ExecuteReader();

            if (_dr.HasRows)
            {
                while (_dr.Read())
                {
                    Student data = new Student();
                    data.Sno = _dr[0].ToString();
                    data.Sname= _dr[1].ToString();
                    data.Ssex = _dr[2].ToString();
                    data.Sbirthday =Convert.ToDateTime( _dr[3]);
                    data.Sclass = _dr[4].ToString();

                    list.Add(data);
                }
            }
            _conn.Close();

            return list;
        }
        public Student Select(string sno)
        {
            
            _cmd.CommandText = "select * from Student where Sno=@sno";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@sno",sno);
            _conn.Open();

            _dr = _cmd.ExecuteReader();
            Student data = new Student();
            if (_dr.HasRows)
            {
                    _dr.Read();
                    data.Sno = _dr[0].ToString();
                    data.Sname = _dr[1].ToString();
                    data.Ssex = _dr[2].ToString();
                    data.Sbirthday = Convert.ToDateTime(_dr[3]);
                    data.Sclass = _dr[4].ToString();              
            }
            _conn.Close();

            return data;
        }
        //删除
        public void Delete(string sno)
        {
            _cmd.CommandText = "delete from Student where Sno=@sno";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@sno",sno);
            _conn.Open();
            _cmd.ExecuteNonQuery();
            _conn.Close();
        }
        //多条件查询
        public List<Student> Select(string sname,string sclass)
        {
            //做两个恒等条件
            string tj1 = " 1=1 ";
            string tj2 = " 1=1 ";
            //根据用户输入改变条件
            //用户输入了姓名
            if(sname !="")
            {
                tj1 = " Sname like @sname ";
            }
            //用户输入了班级
            if(sclass !="")
            {
                tj2 = " Class = @sclass ";            
            }
            //拼接成完整的条件
            string tj = " where " + tj1 + " and " + tj2;
            List<Student> list = new List<Student>();
            _cmd.CommandText = "select * from Student"+tj;
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@sname","%"+sname+"%");
            _cmd.Parameters.AddWithValue("@sclass",sclass);
            _conn.Open();

            _dr = _cmd.ExecuteReader();

            if (_dr.HasRows)
            {
                while (_dr.Read())
                {
                    Student data = new Student();
                    data.Sno = _dr[0].ToString();
                    data.Sname = _dr[1].ToString();
                    data.Ssex = _dr[2].ToString();
                    data.Sbirthday = Convert.ToDateTime(_dr[3]);
                    data.Sclass = _dr[4].ToString();

                    list.Add(data);
                }
            }
            _conn.Close();

            return list;
        }
        //修改
        public void Update(string sno, string sname, string ssex, DateTime sbirthday,string sclass)
        {
            _cmd.CommandText = "update Student set Sname=@sname,Ssex=@ssex,Sbirthday=@sbirthday,Class=@sclass where Sno = @sno";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@sno", sno);
            _cmd.Parameters.AddWithValue("@sname", sname);
            _cmd.Parameters.AddWithValue("@ssex", ssex);
            _cmd.Parameters.AddWithValue("@sbirthday", sbirthday);
            _cmd.Parameters.AddWithValue("@sclass", sclass);

            _conn.Open();
            _cmd.ExecuteNonQuery();
            _conn.Close();
        }
        //添加
        public bool Add(string sno, string sname,string ssex,DateTime sbirthday,string sclass)
        {
            _cmd.CommandText = "insert into Student values(@sno,@sname,@ssex,@sbirthday,@sclass)";
            _cmd.Parameters.Clear();
            _cmd.Parameters.AddWithValue("@sno", sno);
            _cmd.Parameters.AddWithValue("@sname", sname);
            _cmd.Parameters.AddWithValue("@ssex", ssex);
            _cmd.Parameters.AddWithValue("@sbirthday", sbirthday);
            _cmd.Parameters.AddWithValue("@sclass", sclass);

            _conn.Open();
            int n = _cmd.ExecuteNonQuery();
            _conn.Close();

            if (n > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

    }
}
StudentDA.cs

 

namespace WindowsFormsApplication2
{
    public class SclassDA
    {
        private SqlConnection _conn;
        private SqlCommand _cmd;
        private SqlDataReader _dr;
        public SclassDA()
        {
            _conn = DBConnect.Conn;
            _cmd = _conn.CreateCommand();
        }
        public List<Sclass> Select()
        {
            List<Sclass> list = new List<Sclass>();
            _cmd.CommandText = "select * from Sclass";
            _conn.Open();

            _dr = _cmd.ExecuteReader();

            if (_dr.HasRows)
            {
                while (_dr.Read())
                {
                    Sclass data = new Sclass();
                    data.Cno = _dr[0].ToString();
                    data.Name= _dr[1].ToString();
                    list.Add(data);
                }
            }
            _conn.Close();

            return list;
        }
        public string SclassName(string cno)
        {
            string name = "95031";
            _cmd.CommandText = "select Name from Sclass where Cno=@cno";
            _cmd.Parameters.AddWithValue("@cno", cno);

            _conn.Open();

            _dr = _cmd.ExecuteReader();

            if (_dr.HasRows)
            {
                _dr.Read();
                name = _dr[0].ToString();
            }

            _conn.Close();
            return name;
        }
    }
}
SclassDA.cs

主窗体:

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public static int bs = 0;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            StudentDA da = new StudentDA();
            //绑定数据源
            dataGridView1.DataSource = da.Select();
            //取消自动显示列
            dataGridView1.AutoGenerateColumns = false;

            //取消选中第一行
            dataGridView1.ClearSelection();
            //给下拉列表绑定值
            SclassDA nda = new SclassDA();
            cmbbanji.DataSource = nda.Select();
            cmbbanji.DisplayMember = "Name";
            cmbbanji.ValueMember = "Cno";
        }

        //删除
        private void txtshan_Click(object sender, EventArgs e)
        {
            MessageBoxButtons btn = MessageBoxButtons.YesNoCancel;
            if (MessageBox.Show("确定要删除么?", "删除数据", btn) == DialogResult.Yes)
            {
                //取出选中行里面绑定的对象
                Student data = dataGridView1.SelectedRows[0].DataBoundItem as Student;

                StudentDA da = new StudentDA();
                da.Delete(data.Sno);
                dataGridView1.DataSource = da.Select();
            }
        }

        //修改
        private void txtxiu_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                //取出选中项的主键值
                Student data = dataGridView1.SelectedRows[0].DataBoundItem as Student;
                //打出修改窗体
                XiuGai xg = XiuGai.NewXiuGai(data.Sno);
                //显示窗体
                xg.Show();
                //xg.Owner = this;
                //让修改窗体获得焦点
                xg.Focus();
            }
            else
            {
                MessageBox.Show("没有选中任何项!");
            }
        }

        //查询
        private void txtcha_Click(object sender, EventArgs e)
        {
            //取数据
            string sname = txtxing.Text;
            string sclass = cmbbanji.SelectedValue.ToString();
            //根据条件查询,结果交给datagirdview显示
            StudentDA da = new StudentDA();
            dataGridView1.DataSource = da.Select(sname,sclass);
            dataGridView1.AutoGenerateColumns = false;
        }

        //时钟工具间隔执行的事件,刷新主窗体
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (bs == 1)
            {
                StudentDA da = new StudentDA();
                dataGridView1.DataSource = da.Select();
                bs = 0;
            }
            //if (Convert.ToInt32(this.Tag) == 1)
            //{
            //    StudentDA da = new StudentDA();
            //    dataGridView1.DataSource = da.Select();
            //    this.Tag = 0;
            //}

        }

        //添加
        private void txttian_Click(object sender, EventArgs e)
        {
            
            //打出修改窗体
            XiuGai xg = new XiuGai();
            //显示窗体
            xg.Show();
            //xg.Owner = this;
            //让修改窗体获得焦点
            xg.Focus();
        }
    }
}
Form1.cs

修改添加窗体:

namespace WindowsFormsApplication2
{
    public partial class XiuGai : Form
    {
        //用来存储传递过来的主键值
        private string Sno = "";
        //用来存储该类的对象
        private static XiuGai xg = null;
        public XiuGai()
        {
            InitializeComponent();
        }
        public XiuGai(string sno)
        {
            InitializeComponent();
            this.Sno = sno;
        }

        private void XiuGai_Load(object sender, EventArgs e)
        {
            if (Sno != "")
            {
                txtsno.ReadOnly = true;
                //给下拉列表绑定值
                SclassDA nda = new SclassDA();
                cmbsclass.DataSource = nda.Select();
                cmbsclass.DisplayMember = "Name";
                cmbsclass.ValueMember = "Cno";
                //对界面内容进行初始化
                StudentDA da = new StudentDA();
                Student data = da.Select(Sno);
                txtsno.Text = data.Sno;
                txtsname.Text = data.Sname;
                bool sex = (data.Ssex == "" ? true : false);
                rdnan.Checked = sex;
                rdnv.Checked = !sex;


                txtsbirthday.Text = data.Sbirthday.ToString("yyyy-MM-dd HH:mm:ss");
            }
            else
            {
                SclassDA nda = new SclassDA();
                cmbsclass.DataSource = nda.Select();
                cmbsclass.DisplayMember = "Name";
                cmbsclass.ValueMember = "Cno";               
            }
            
        }
        //返回对象的方法
        public static XiuGai NewXiuGai(string sno)
        {
            if (xg == null || xg.IsDisposed)
            {
                xg = new XiuGai(sno);
            }

            return xg;
        }

        //修改
        private void button1_Click(object sender, EventArgs e)
        {
            //获取数据
            string _sno = txtsno.Text;
            string _sname = txtsname.Text;
            string _ssex=(rdnan.Checked==true?"":"");
            DateTime _sbirthday = Convert.ToDateTime(txtsbirthday.Text);
            string _sclass = cmbsclass.SelectedValue.ToString();

            StudentDA ida = new StudentDA();
            ida.Update(_sno, _sname, _ssex, _sbirthday, _sclass);

            //this.Owner.Tag = 1;
            //给Form1的成员变量bs赋值
            Form1.bs = 1;
            this.Close();
        }

        //查询
        private void button2_Click(object sender, EventArgs e)
        {
            string _sno = txtsno.Text;
            string _sname = txtsname.Text;
            string _ssex = (rdnan.Checked == true ? "" : "");
            DateTime _sbirthday = Convert.ToDateTime(txtsbirthday.Text);
            string _sclass = cmbsclass.SelectedValue.ToString();

            StudentDA ida = new StudentDA();
            ida.Add(_sno, _sname, _ssex, _sbirthday, _sclass);

            //this.Owner.Tag = 1;
            Form1.bs = 1;
            this.Close();
        }
    }
}
XiuGai.cs

效果显示区:

主窗体:

 

删除:

添加:

修改:

查询:

 

 

※数据区别显示

//遍历datagridview里面行的集合,取出每一个行

foreach (DataGridViewRow row in dataGridView1.Rows)

{

//将该行里面绑定的数据项取出

Info data = row.DataBoundItem as Info;

//判断是不是男女

if (data.Sex)
{
}
}

 

winform窗体退出前判断表单是不是修改过,窗体上的控件有很多个,textbox,combox,datagridview

判断修改的目的是为了提示用户是否要保存!给你思路,在退出窗体的事件中写代码遍历窗体中的控件,如果当前控件是TextBox并判断他的Text属性是否为空如果不为空,则提示保存代码如下privatevoidForm1_FormClosing(objectsender,FormClosin... 查看详情

c#winform如何在点击按钮获取数据后,将数据在按钮所在窗体上显示出来

窗体显示时,datagridview的visible属性为false,点击窗体上的按钮后,会得到datatable类型的数据,若数据不为空,则datagridview控件的visible属性为true,并将数据显示出来上;若为空,则datagridview控件的visible任为false。现在的问题是,... 查看详情

c#窗体的datagridview分页

囧,是窗体,没有内置方法,如果可以的话,最好给一个demo谢谢了是窗体~文艺点就是winform……参考技术A这个其实都一样的,你只要了解分页的原理,就能知道怎么做的分页无非是内存分页,和数据库分页前者是一次性读取所... 查看详情

winform一个窗口调用另外一个窗口的控件

form2是form1show出来的窗口form1里DataGridView中有checkbox控件我要得到DataGridView中的checkbox是否选中就是总得不到form1中的控件无法循环判断是否选中简单啊,构造函数,或者属性注入都可以的。建议将Form1的是否选中定义一个PublicboolIs... 查看详情

我们如何在winform的datagridview中进行分页

】我们如何在winform的datagridview中进行分页【英文标题】:Howcanwedopaginationindatagridviewinwinform【发布时间】:2011-02-1900:37:20【问题描述】:我想在窗口窗体的datagridview中每页显示10条记录,用户必须单击下一步按钮才能显示接下来... 查看详情

c#winform程序中,将a窗体datagridview中选中的数据传到b窗体里面的各个文本框中进行修改

...击修改按钮,对话框自动关闭3.修改成功了参考技术A通过datagridview双击事件实现获取datagridview数据,代码如下:privatevoiddataGridView1_CellDoubleClick(objectsender,DataGridViewCellEventArgse)//取得当前单元格内容Console.WriteLine(DataGridView1.CurrentCell... 查看详情

怎么解决winform里datagridview放在计时器里滚动条闪烁问题

...双缓冲新建类,DoubleBufferListView.cs///<summary>///双缓冲DataGridView,解决闪烁///</summary>classDoubleBufferListView:DataGridViewpublicDoubleBufferListView()//下面语句为开启双缓冲SetStyle(ControlStyles.DoubleBuffer|ControlStyles.OptimizedDoubleBuffer|ControlSty... 查看详情

winform控件之datagridview数据控件显示问题

...   最近在做同类的信息记录管理系统时遇到了DataGridView数据控件的显示问题,可能是2015年的上半年没有深入学习C#开发的原因,这几天重新搬出来开发,首先遇到的问题就是动态绑定数据显示的问题,琢磨了很久,在... 查看详情

使用两个windows窗体datagridview控件创建一个主/从窗体

使用DataGridView控件的一种最常见方案是“主/详细信息”窗体,这样的窗体可显示两个数据库表之间的父/子关系。如果选择主表中的行,将导致以相应的子数据来更新详细信息表。主/详细信息窗体很容易实现,这需要使用DataGridV... 查看详情

winform中如何在一个页面使另一个页面的datagridview重新绑定数据源啊。求代码。。本人不是很会,给高分

参考技术A要想在这个窗体控制另一个窗体的控件,把另一个窗体控件的modifiers属性设为public就可以的!不懂可以继续追问!望采纳! 查看详情

winform窗体内函数调用

...数:privatevoidresult()for(inti=0;i<SearchResult.uiProbeID.Length;i++)dataGridView1.Rows.Add(SearchResult.uiProbeID[i],SearchResult.uiFileID[i],SearchResult.sFileName[i],SearchResult.sLastUpdataTime[i]);全局函数不能调用这个,错误是“非静态的字段、方法或属性"resul... 查看详情

winform中datagridview控件添加行标题

有很多种方法。 1、可以在DataGridView控件中的RowStateChanged事件改变行标题单元格的值(Row.HeaderCell.Value)1///<summary>2///行状态更改时发生3///</summary>4///<paramname="sender"></param>5///<paramname="e"& 查看详情

winform控件之combobox,datagridview(代码片段)

1.代码结构截图2.核心代码usingSystem;usingSystem.Data;usingSystem.Drawing;usingSystem.Windows.Forms;namespaceWinFormComboBoxDemos///<summary>///WinForm程序:ComboBox和DataGridView使用方法///LDH@2018-3-6///</su 查看详情

winform中如何在点击datagridview的时候不让窗体的滚动条自动滚动

页面上有个滚动条,datagridview在窗体的最下面,打开页面的时候datagridview并没有完全显示出来,如图:这时候如果我点击datagridview,页面的滚动条自动调整高度,将datagridview拉到屏幕中间,确保我能看得到它,如图:这个事件对... 查看详情

winform控件之datagridview数据控件显示问题

...   近期在做同类的信息记录管理系统时遇到了DataGridView数据控件的显示问题。可能是2015年的上半年没有深入学习C#开发的原因。这几天又一次搬出来开发,首先遇到的问题就是动态绑定数据显示的问题。琢磨了非常久... 查看详情

winform如何实现listview控件中数据的换行显示?

  ListView控件应该不支持换行显示,但是,可以用DataGridView来实现。  DataGridView控件具有极高的可配置性和可扩展性,它提供有大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。  当需要在Windows窗体... 查看详情

winform自定义分页控件及datagridview数据绑定

  分页效果如上图所示,用到的控件均为基本控件,其方法如下右击项目-添加-新建项选择用户控件然后在用户控件中拖入所需要的Label,Button,Text用户控件全部代码: usingSystem;usingSystem.Collections.Generic;usingSystem.Componen... 查看详情

winform中datagridview控件的列名怎样实现多表头?

</img>参考技术A用2个datagridview控件,上面那个就一个表头,去掉其他的编辑,修改和添加属性,下面的那个才是绑定数据库的,如果你的列能自定义宽度,则还需要在这2个控件上添加列宽变化事件,使得上下2个控件列宽统一下. 参考... 查看详情