DateGrid在ADO.NET中的应用

本文介绍DataGridView控件的高级应用,包括直接在控件中修改和删除数据的方法,利用实例化数据集实现导航功能,以及如何在单元格中添加自定义控件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DateGrid是Visual Studio .NET中最通用,最灵活,功能最强的控件,主要是以表格的形式显示数据,并可根据需要编辑数据,在应用程序访问数据库使用较多的方法,DateGrid在Visual Studio 2005中以被功能更为强大的DateGridView代替,基本用法差不多,这里用DateGridView为例,国际惯例,所有代码均只实现功能,异常、数据验证等等不考虑,如有需要请自行添加。
     示例1:窗体:
    
     跟昨天做那个类似,只是这次是直接在DataGridView中修改,删除数据,操作完成后点击相应的按钮,完成对数据库的操作,不难写,只把修改、删除按钮的事件写出来:
   

        

private void button2_Click(object sender, EventArgs e)//修改按钮事件
        {
            SqlCommand updateCmd = new SqlCommand("update studentInfo set Name=@par1 where No=@par2", con);
           
            updateCmd.Parameters.Add("@par2", SqlDbType.Int);
            updateCmd.Parameters.Add("@par1", SqlDbType.VarChar,10);
           
            updateCmd.Parameters["@par2"].SourceColumn = "No";
            updateCmd.Parameters["@par2"].SourceVersion = DataRowVersion.Original;

            updateCmd.Parameters["@par1"].SourceColumn = "Name";
            updateCmd.Parameters["@par1"].SourceVersion = DataRowVersion.Current;
            da.UpdateCommand= updateCmd;
            da.Update(ds, "studentInfo");
        }

     只要注意注意两个参数的SourceVersion就可以了,修改的时候只允许修改姓名列,因此学号列应设为Original。

        

private void button1_Click(object sender, EventArgs e) //删除按钮事件
        {           
            this.dataGridView1.Rows.RemoveAt(this.dataGridView1.SelectedRows[0].Index); //删除选中行
            SqlCommand deleteCmd = new SqlCommand("delete from studentInfo where No=@par1",con);
            deleteCmd.Parameters.Add("@par1",SqlDbType.Int);
            deleteCmd.Parameters["@par1"].SourceColumn = "No";
            deleteCmd.Parameters["@par1"].SourceVersion = DataRowVersion.Original;
            da.DeleteCommand = deleteCmd;
            da.Update(ds, "studentInfo");
        }
     原理基本相同,需要注意的是,当按删除按钮时,同时应该将控件里的该行数据删除。

     前面几题的DataGridView的数据源DataSet都是非实例化的数据集,意思就是DataSet中存储的都是当程序运行时或运行后,与数据库发生交互时所得到的结果集,因此当程序尚未运行时,DataGridView控件中的数据是不可见的,而实例化的数据集通俗的理解就是不需要程序运行,该结果集便已存在,因此在界面搭建以及代码编写方面会方便很多,但是如果只是实现普通的功能,两种方式都可以完成,而实例化的数据集一个重要的作用就是构建导航。

     示例2:实例化数据集实现导航

     窗体:

    

     说明,该窗体中控件中的字段来自Northwind数据库中的Customers(顾客)表及Orders(定单)表,两表中分别包含字段CustomerID(顾客编号),并且这两列有主外键约束,该窗体上方ListBox控件中显示Customers表中的字段CompanyName(公司名称),当选中某行时,下方的DataGridView控件中显示该公司的顾客编号及定单编号,方便查询。

     实现步骤如下:

     1.为该项目添加一个新建项,项目类型为数据集,建立完毕后选择菜单中的视图→服务器资源管理器,新建一个数据连接,指向SQL Server中的Northwind数据库,建立完毕后,将Customers表及Orders表拖入窗体,与Visual Studio 2003不同,Visual Studio 2005可以将两表间的引用关系一起带入程序,因此不必再次在两表间建立Relation。

     2.搭建主窗体,加入DataGridView,ListBox,然后不要忘记最重要的一步,向窗口中拖入一个DataSet对象,在弹出的对话框中选择“类型化的数据集”,并选择刚才新加入的实例化数据集。

     3.程序架构完毕,剩下就是敲代码了,主窗体代码如下:

    

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e) //生成窗体事件
        {
            SqlConnection con = new SqlConnection("server=localhost;integrated security=SSPI;database=northwind");
            SqlDataAdapter da = new SqlDataAdapter("select customerID,CompanyName from customers",con);
            da.Fill(this.ds, "customers");
            da = new SqlDataAdapter("select orderID,customerid from orders",con);
            da.Fill(this.ds, "orders");
            this.dataGridView1.DataSource = ds;          
        }

    }
}

      注意ds并不是一个DateSet类型的对象,而是刚才拖入窗体中的DateSet的名字,它是项目中新建的实例化的数据集的对象,写完上面代码后,装到窗口设计视图,在DataGridView控件的属性中,将DataSource属性设置为,然后选择控件的DataMember属性时我们会惊奇的发现,VS2005可以帮我们自动生成关联表!这就免去了许多复杂的表连接操作。,设置完DataGridView,不要忘记设置ListBox的DataSource,如图:请注意ListBox的DataSource务必设置为ds,也就是与DataGridView的DataSource相同!不仅这里,如果想实现导航功能,控件与控件的DataSource必须相同!DisplayMember是显示字段,是呈现于控件上的外观数据,根据题目需要,需要将此处设置为Customers表的CompanyName字段,而ValueMember则是选中行后的返回值,此处应设置为Customers表中的CustomerID字段,如此一来,这道题目就解决了。

     示例3:DataGridView中向单元格中添加控件。

     DataGridView中的单元格实际就是些TextBox(文本框),而我们大多用文本框储存字符串,实际上TextBox也是控件,也可以容纳其他控件,比如ListBox(下拉列表框)等等,因此我们可以在DataGridView中的某列添加统一的控件 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值