用 C# 访问 SQLite 入门(2)

用 C# 访问 SQLite (2)

 

6. Form 与 DataGridView

 

在 Solutuon Explorer 点击 Form1.cs , 在打开的 Form1[Design] 添加控件

 

在 Toolbox 拉入4个 Label, 分别命名,例如:lblID, lblBookname, lblPrice, lblGuid

在 Toolbox 拉入4个 TextBox, 分别命名,例如: txtID, txtBookname, txtPrice, txtGuid

在 Toolbox 拉入2个 Button, 分别命名,例如: btnExit, btnSave

在 Toolbox 拉入1个 DataGridView, 命名,例如: dgv1

 

适当排列和布局,就可以达到这样的一个输入和现实界面:

 


 

当然,可以把 Form1 的尺寸调大,把各个控件的尺寸也放大一些。

 

双击 Form1 就会打开 Form1.cs 来输入语句。


 

在 Form1.cs[Design] 分别双击 btnExit , btnSave 和 dgv1 然后在 Form1.cs 输入相关的语句:

 

        private void Form1_Load(object sender, EventArgs e)
        {
            initView1();
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            //find a GUID for new row to insert into DB
            StringBuilder guidSB = new StringBuilder(System.Guid.NewGuid().ToString());
            guidSB.Replace("-", "");  //replace -
            string guidStr = guidSB.ToString();

            //new book object            
            Book book1 = new Book();
            book1.ID = Convert.ToInt32(txtID.Text);
            book1.BookName = txtBookname.Text;
            book1.Price = Convert.ToDecimal(txtPrice.Text);
            book1.Rowguid = guidStr;

            //save to DB
            BookDAL.CreateBook(book1);

            //Read the rows from DB and display in dgv
            initView1();
        }

        private void dgv1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        //===================================================
        // Click a row to dusplay its field in textbox
        //===================================================
        private void dgv1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0) return;
            if (e.ColumnIndex < 0) return;

            int rowIndx = dgv1.CurrentCell.RowIndex;

            txtID.Text = this.dgv1[0, e.RowIndex].Value.ToString();  //column 0
            txtBookname.Text = this.dgv1[1, e.RowIndex].Value.ToString();  //column 1
            txtPrice.Text = this.dgv1[2, e.RowIndex].Value.ToString();  //column 2
            txtGuid.Text = this.dgv1[3, e.RowIndex].Value.ToString();  //column 3
        }


        //===================================================
        // init the data view: datagridview and text boxes
        //===================================================
        private void initView1()
        {
            dgv1.DataSource = null;

            DataTable dt1 = new DataTable();

            dt1 = BookDAL.GetAllBook();
            if (dt1.Rows.Count > 0)
            {
                dgv1.DataSource = dt1;
            }

        }
 

这里需要特别说明的是 DataGirdView 的点击事件。我们希望 点一下 DataGridView 的任一单元格, 就把这行的数据显示到 TextBox 对应项。

 

在 dgv1 双击 会产生这个事件控制段:

 

        private void dgv1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
 

但是,这个 CellContentClick 控制不是对Cell 点击的控制,在其中加入代码,在 鼠标点击 Cell (单元格) 时不会触发这个事件。所以,我们要手工加入 CellClick 的事件控制:

 

        private void dgv1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0) return;
            if (e.ColumnIndex < 0) return;

            int rowIndx = dgv1.CurrentCell.RowIndex;

            txtID.Text = this.dgv1[0, e.RowIndex].Value.ToString();  //column 0
            txtBookname.Text = this.dgv1[1, e.RowIndex].Value.ToString();  //column 1
            txtPrice.Text = this.dgv1[2, e.RowIndex].Value.ToString();  //column 2
            txtGuid.Text = this.dgv1[3, e.RowIndex].Value.ToString();  //column 3
        }

 

这样就可以了吗?还不行。

 

因为 这个 CellClick 是你自己加入的,还不能被识别,需要在 Form1.Designer.cs 加入这个 CellClick 的识别:

 

在 Solution Explorer 在 Form1.cs 下面, 点 Form1.Designer.cs, 点  Open

 


 

点一下 “Windows Form Designer generated code” 前面的 + 号 ,就展开各控件的定义设置语句。

 

在 dgv1 下加入 CellClick 的定义:

 


 

保存,关闭 Form1.Designer.cs 即可。

 

这是很重要的一步,在网上多数的例子都是列出数据库操作语句,而这个设置就没有特别说明。我就是在网上搜索了很多例子,最后是在 msdn 论坛发问,才得到指点,而添加这一行来控制 单元格的点击操作。

 

其他的数据库操作,例如 插入,更新,删除,等等,可以看网上的例子。

 

 

7. SQLite ADO.NET 版本问题

 

现在可以调试一下,看看运行的效果:

 

在 VS 菜单,Debug -> Start Debugging

 


就会看到一个 Mixed mode 错误。原因么,就是因为这个 SQLite ADO.NET 是支持 2.0 runtime 的, 而我们现在是在 .NET 4.0 环境下来使用,所以需要特别的设置。


 

那特别的设置在哪里呢? 在 App.config 文件, 而这个文件缺省并不存在,需要手工添加:

 

先关闭 调试状态, Debug -> Stop Debugging

 

在 Solution Explorer 点 项目名, 按鼠标右键,选 Add -> New Item

 


 

在弹出的对话框,点选Application Configuration File, 然后点 Add 添加。

 


 

在打开的 App.config 编辑窗口,加入一行:

 

<startup useLegacyV2RuntimeActivationPolicy="true"><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>

 


 

保存,关闭 App.config 即可。

 

再试运行一下吧:

 


 

现在可以了。在 各个 textbox 输入数据,然后点 Save 数据就插入 数据库,并在 Datagridview 显示出来。点击 Datagridview 的任一单元格,这行的数据就显示到 textbox 可供编辑。

 

这样一个很简单的 SQLite 数据库操作就完成了。但是,以上的操作还是太简单,需要添加的功能太多了,可以参考网上的很多例子来逐步完善。

 

 

:-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值