DateGrid在ADO.NET中的应用

来源:互联网 发布:传智python就业班 编辑:程序博客网 时间:2024/05/21 00:14
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中的某列添加统一的控件 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 数码相机拍出的相片亮度太亮怎么办 国考照片错了怎么办招生办能改吗 国考英语准考证名字错了怎么办 玻尿酸打鼻子双眼间距好怪怎么办 喝咖啡后胃不舒服想吐怎么办 分期付款买的车不想还款了怎么办 考试时打小抄被同学发现怎么办 生完二胎计生办强制要求上环怎么办 没办二代身份证户口被注销怎么办 川航特价儿童票名字写错怎么办 川航机票名字错一个字怎么办 买飞机票名字打错了一个字怎么办 坐飞机耳朵聋了下飞机还痛怎么办 小孩咳嗽两个月了还不好怎么办 生完小孩肚子瘦不下来怎么办 胆子小一个人在家里都害怕怎么办 怀了双胞胎两个宝宝很挤怎么办 飞机无人陪护如果接机延误该怎么办 过年要坐火车回家 狗狗怎么办 一岁八个月宝宝小腿弯怎么办 2岁宝不愿意坐马桶拉屎怎么办 宝宝两岁多肺炎出院还老咳嗽怎么办 去外国机场买机票不会说外语怎么办 坐飞机不能带的物品办理托运怎么办 深圳外地户口儿童要办身份证怎么办 网上订票错写了护照号怎么办 国航 在智能火车票订飞机票订反了怎么办 办社保卡的时候填错地址怎么办 两个人住酒店只有一张身份证怎么办 农村社保卡信息错了说改不了怎么办 社保卡与原医保卡信息错误怎么办 学校发的社保卡丢了怎么办 魔棒工具选中选区后再怎么办 微信每次打开都出现月球图案怎么办 仙人掌的刺扎手里弄不出来怎么办 保险交满15年领了一年死了怎么办 狗咬了出了点血怎么办 被小狗咬到了吃了海鲜怎么办 想给一个人道歉又不敢说怎么办 被尘封的故事中魔法师不见了怎么办 宝骏5602挡升3挡有点卡怎么办