设为首页 收藏本站
查看: 1458|回复: 0

[经验分享] 用 C# 访问 SQLite 入门(2)

[复制链接]

尚未签到

发表于 2016-11-30 10:13:17 | 显示全部楼层 |阅读模式
  用 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
  适当排列和布局,就可以达到这样的一个输入和现实界面:
  
DSC0000.png
  当然,可以把 Form1 的尺寸调大,把各个控件的尺寸也放大一些。
  双击 Form1 就会打开 Form1.cs 来输入语句。
  
DSC0001.png
  在 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
  
DSC0002.png
  点一下 “Windows Form Designer generated code” 前面的 + 号 ,就展开各控件的定义设置语句。
  在 dgv1 下加入 CellClick 的定义:
  
DSC0003.png
  保存,关闭 Form1.Designer.cs 即可。
  这是很重要的一步,在网上多数的例子都是列出数据库操作语句,而这个设置就没有特别说明。我就是在网上搜索了很多例子,最后是在 msdn 论坛发问,才得到指点,而添加这一行来控制 单元格的点击操作。
  其他的数据库操作,例如 插入,更新,删除,等等,可以看网上的例子。
  7. SQLite ADO.NET 版本问题
  现在可以调试一下,看看运行的效果:
  在 VS 菜单,Debug -> Start Debugging
  
DSC0004.png
  就会看到一个 Mixed mode 错误。原因么,就是因为这个 SQLite ADO.NET 是支持 2.0 runtime 的, 而我们现在是在 .NET 4.0 环境下来使用,所以需要特别的设置。
  
DSC0005.png
  那特别的设置在哪里呢? 在 App.config 文件, 而这个文件缺省并不存在,需要手工添加:
  先关闭 调试状态, Debug -> Stop Debugging
  在 Solution Explorer 点 项目名, 按鼠标右键,选 Add -> New Item
  
DSC0006.png
  在弹出的对话框,点选Application Configuration File, 然后点 Add 添加。
  
DSC0007.png
  在打开的 App.config 编辑窗口,加入一行:

<startup useLegacyV2RuntimeActivationPolicy="true"><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
  
DSC0008.png
  保存,关闭 App.config 即可。
  再试运行一下吧:
  
DSC0009.png
  现在可以了。在 各个 textbox 输入数据,然后点 Save 数据就插入 数据库,并在 Datagridview 显示出来。点击 Datagridview 的任一单元格,这行的数据就显示到 textbox 可供编辑。
  这样一个很简单的 SQLite 数据库操作就完成了。但是,以上的操作还是太简单,需要添加的功能太多了,可以参考网上的很多例子来逐步完善。
  :-

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307574-1-1.html 上篇帖子: Android中Sqlite数据库的使用 下篇帖子: SQLite关于时间段查询的sql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表