当前位置: 代码迷 >> SQL >> 用 C# 访问 SQLite 入门(二)
  详细解决方案

用 C# 访问 SQLite 入门(二)

热度:407   发布时间:2016-05-05 13:09:34.0
用 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 数据库操作就完成了。但是,以上的操作还是太简单,需要添加的功能太多了,可以参考网上的很多例子来逐步完善。

?

?

:-

  相关解决方案