C#端加载数据库,Combobox与Node控件绑定数据源demo示例
最近一直在做网页。用的js比较多,最近需要做一个C#相关的demo,一开始还有点不适应,写了几句有点感觉了
本篇博客的主要内容是C#怎么读取数据库文件里的数据以及相关控件如何绑定数据源,所做的Demo如图所示:

首先在from上将需要控件拖放好,设置属性,连接数据库:
工具--连接到数据库--选择数据源,填写相关数据:

连接数据库之后,在开头引用using System.Data.SqlClient;
编写一个函数,命名为SetCombobox,从数据库内位Combobox绑定数据源,具体的函数如下
//Combobox绑定数据源
private void SetCombobox()
{
//输入想关联的数据库的基本信息
SqlConnection conn = new SqlConnection(@" server = DESKTOP-5SDB4D4;Initial Catalog= test;User ID=sa;Password=lmz123LMZ");
//打开数据库连接
conn.Open();
//sql语句
string str = " select * from [test].[dbo].[TRaw] where c1 = 0";
//创建命令对象
SqlCommand lo_cmd = conn.CreateCommand();
lo_cmd.CommandText = str;
SqlDataReader dtr = lo_cmd.ExecuteReader();
while (dtr.Read())
{
//邦定数据
comboBox1.Items.AddRange(new object[] { dtr["c3"] });//邦定数据
}
dtr.Close();
comboBox1.SelectedIndex = ;
conn.Close();
}
数据库内不同的法律法规有不同的指代编号,这里写一个dictionary函数,当选中法律条款时返回对应的数据编号
//法律法规与编号相对应
Dictionary<string, int> laws = new Dictionary<string, int>();
当读取数据库时编写dictionary函数:
//法律名称
string Lawsname = (string)dtr["c3"];
//法律代码
int number = (int)dtr["c0"]; //向dictionary函数赋值
if (!laws.ContainsKey(Lawsname))
laws.Add(Lawsname, number)
else
Console.WriteLine(Lawsname);
点击启动,完成,法律法规已经在列表中显示,且不同的法律法规对应着不同的数列:

在控件右边添加treeview控件,具体绑定数据库代码如下:
//对应法律名称的法律编号
int rawid = laws[name];
int id = ;
treeView1.Nodes.Clear(); //输入想关联的数据库的基本信息
SqlConnection conn = new SqlConnection(@"server = DESKTOP-5SDB4D4;Initial Catalog= test;User ID=sa;Password=lmz123LMZ");
conn.Open();
//sql语句
string str = "select * from [test].[dbo].[TRaw] where c4 = 1 and c0 = " + rawid;
//创建命令对象
SqlCommand lo_cmd = conn.CreateCommand();
lo_cmd.CommandText = str;
SqlDataReader dtr = lo_cmd.ExecuteReader(); while (dtr.Read())
{
//父节点的内容
TreeNode node = new TreeNode("第" + NumberToChinese(id) + "条");
treeView1.Nodes.Add(node);
//自动展开
treeView1.ExpandAll();
string Laws1; //法律名称
if ( !dtr.IsDBNull() )
{
Laws1 = (string)dtr["c3"];
}
else
Laws1 = "子条款";
node.Tag = Laws1;
id++; }
dtr.Close();
conn.Close();
编辑nodeMouseClick事件:
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
label1.Text = e.Node.Tag.ToString();
}
效果如图所示,不同法律名称对应不同的数据量,单机node显示不同的法律条文:


Demo完整代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using System.Data.SqlClient; namespace WindowsFormsApp1
{
public partial class Form1 :Form
{
//法律法规与编号相对应
Dictionary<string, int> laws = new Dictionary<string, int>(); public Form1()
{
InitializeComponent();
SetInfo();
SetCombobox();
} //设置属性信息
private void SetInfo()
{
//获取窗体长度
int width = this.Width;
//获取窗体高度
int height = this.Height; //设置panel1的属性
panel1.Height = height / ;
panel1.Top = ;
panel1.Left = ;
panel1.Width = width; //设置panel2的属性
panel2.Height = height - height / ;
panel2.Top = panel1.Height;
panel2.Left = ;
panel2.Width = width / ; //设置panel3的属性
panel3.Height = height - height / ;
panel3.Top = panel1.Height;
panel3.Left = width / ;
panel3.Width = width - width / ; //设置treeView1属性
treeView1.Top = ;
treeView1.Left = ;
treeView1.Width = panel2.Width;
treeView1.Height = panel2.Height;
} //Combobox绑定数据源
private void SetCombobox()
{
//输入想关联的数据库的基本信息
SqlConnection conn = new SqlConnection(@"server = DESKTOP-5SDB4D4;Initial Catalog= test;User ID=sa;Password=lmz123LMZ");
//打开数据库连接
conn.Open();
//sql语句
string str = " select * from [test].[dbo].[TRaw] where c1 = 0";
//创建命令对象
SqlCommand lo_cmd = conn.CreateCommand();
lo_cmd.CommandText = str;
SqlDataReader dtr = lo_cmd.ExecuteReader(); while (dtr.Read())
{
//邦定数据
comboBox1.Items.AddRange(new object[] { dtr["c3"] });//邦定数据
//法律名称
string Lawsname = (string)dtr["c3"];
//法律代码
int number = (int)dtr["c0"]; //向dictionary函数赋值
if (!laws.ContainsKey(Lawsname))
laws.Add(Lawsname, number);
else
Console.WriteLine(Lawsname);
}
dtr.Close();
comboBox1.SelectedIndex = ;
conn.Close();
} //显示具体的法律条款
private void ShowLaw(string name)
{
//对应法律名称的法律编号
int rawid = laws[name];
int id = ;
treeView1.Nodes.Clear(); //输入想关联的数据库的基本信息
SqlConnection conn = new SqlConnection(@"server = DESKTOP-5SDB4D4;Initial Catalog= test;User ID=sa;Password=lmz123LMZ");
conn.Open();
//sql语句
string str = "select * from [test].[dbo].[TRaw] where c4 = 1 and c0 = " + rawid;
//创建命令对象
SqlCommand lo_cmd = conn.CreateCommand();
lo_cmd.CommandText = str;
SqlDataReader dtr = lo_cmd.ExecuteReader(); while (dtr.Read())
{
//父节点的内容
TreeNode node = new TreeNode("第" + NumberToChinese(id) + "条");
treeView1.Nodes.Add(node);
//自动展开
treeView1.ExpandAll();
string Laws1; //法律名称
if ( !dtr.IsDBNull() )
{
Laws1 = (string)dtr["c3"];
}
else
Laws1 = "子条款";
node.Tag = Laws1;
id++; }
dtr.Close();
conn.Close();
} //当选择框发生变化时
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string name = (string)comboBox1.SelectedItem;
ShowLaw(name);
} //数字转中文
public string NumberToChinese(int number)
{
string res;
string str = number.ToString();
string schar = str.Substring(, );
switch (schar)
{
case "":
res = "一";
break;
case "":
res = "二";
break;
case "":
res = "三";
break;
case "":
res = "四";
break;
case "":
res = "五";
break;
case "":
res = "六";
break;
case "":
res = "七";
break;
case "":
res = "八";
break;
case "":
res = "九";
break;
default:
res = "零";
break;
}
if (str.Length > )
{
switch (str.Length)
{
case :
case :
res += "十";
break;
case :
case :
res += "百";
break;
case :
res += "千";
break;
case :
res += "万";
break;
default:
res += "";
break;
}
res += NumberToChinese(int.Parse(str.Substring(, str.Length - )));
} res = res.Replace("十零", "十").Replace("一十", "十");
return res;
} private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
label1.Text = e.Node.Tag.ToString();
} }
}
C#端加载数据库,Combobox与Node控件绑定数据源demo示例的更多相关文章
- ComboBox控件绑定数据源后,添加'请选择'或'全部'
ComboBox控件绑定数据源后,添加'请选择'或'全部' 当使用ComboBox控件绑定数据源之后,通过Items 属性添加的数据是无效的,此时如果要在所有选项前添加 选项 ,则需要考虑从数据源下手 ...
- ComboBox控件绑定数据源
最近在研究机房收费系统的组合查询的方法时,看到了ComboBox控件可以进行数据绑定,我觉得这个功能真的很不错,可以给我省去很多的麻烦. 下面是我组合查询窗体界面 一.数据转换方法 现在我们开看一下我 ...
- Winform开发之ComboBox和ComboBoxEdit控件绑定key/value数据
使用 ComboBox 控件绑定key/value值: 因为 ComboBox 是有 DataSource 属性的,所以它可以直接绑定数据源,如 DataTable.ListItem 等. 使用 Da ...
- [MFC] MFC 打开HTML资源(用ID版,也可加载到自己的web控件上)
@ ^ @:如果是加载到web控件上,就把注释掉的解除注释(改为web控件点后面的函数),把下一句注释 BOOL Button::LoadFromResource(UINT nRes){//打开网页加 ...
- ASP.NET中页面加载时文本框(texbox控件)内有文字获得焦点时文字消失
代码如下: <asp:TextBox ID="TextBox1" runat="server" Height="26px" MaxLe ...
- BitmapImage处理网络图片,例如阿里云获取的图片。异步加载到需要显示的控件上。提升速度非常明显。
想直接把网络图片赋给控件,又要下载又要缓存,速度非常慢.不流畅. 需要进行处理,异步加载会显著提升速度.方法如下: public static BitmapImage ByteArrayToBitma ...
- 【WPF学习笔记】之如何点击“新建”按钮,在面板中加载一条条的“用户控件”的信息:动画系列之(四)
...... 承接上一系列动画三. 在主界面后台代码设置嵌套第二个用户控件. using System; using System.Collections.Generic; using System. ...
- 页面加载通过javascript来修改控件属性
function changeFormElementStatus(tagNames) { var tagNameArr = tagNames.split("," ...
- ajax验证表单元素规范正确与否 ajax展示加载数据库数据 ajax三级联动
一.ajax验证表单元素规范正确与否 以用ajax来验证用户名是否被占用为例 1创建表单元素<input type="text" id="t"> 2 ...
随机推荐
- node 按行读取文件
var readline = require('readline'); var fs = require('fs'); var os = require('os'); var fReadName = ...
- jquery easyui datagrid 空白条处理 自适应宽高 格式化函数formmater 初始化时会报错 cannot read property 'width'||'length' of null|undefined
1---表格定义好之后右侧可能会有一个空白条 这个空白条是留给滚动条的,当表格中的一页的数据在页面中不能全显示时会自动出现滚动条,网上有很多事要改源码才可以修改这个,但是当项目中多处用到时,有的需要滚 ...
- win10系统jdk安装和环境变量配置
新换电脑的原因,要重新安装jdk,完整记录一下安装过程 jdk版本用的1.7(公司默认版本) 这是jdk安装目录 更改为D:\jdk\java\jdk1.7 安装jre目录 更改为D:\jdk\ ...
- QT多线程信号和槽参数传递
写了一个这样的信号 void caculateReady( QList<QString> adds, QList<double> hotV, QList<double&g ...
- 2018.1.7java转型
从昨天的组合和继承开始,我在分析二者的区别,到后面的向上转型,再到hashcode和equals还有==的区别,感觉基础还很不好,也许,目前应该从面向对象开始复习,把暂时笔试宝典放一下. 回忆一下今天 ...
- fjwc2019 D2T3 排序(堆)
#183. 「2019冬令营提高组」排序 贴一段ppt 考虑模拟出这个算法进行k轮(即外层的i循环到k)时的序列,之后再暴力模拟零散的步. 考虑这个算法在01序列上的表现,k轮后实际上就是将最开始的不 ...
- 12: xlrd 处理Excel文件
1.1 xlrd处理.xlsx 文件 1.xlrd常用方法 #!/usr/bin/python # coding:utf-8 # 用xlrd读取Excel文件基本用法 import sys impor ...
- adb驱动安装和使用报错笔记
adb驱动安装 adb驱动下载地址:https://adb.clockworkmod.com/ 安装时候选择一个容易记住的路径,这个很重要,因为adb驱动没有自动配置环境变量,所以实验时候将adb安装 ...
- you must restart adb and eclipse的相关解决办法
问题是5037端口被占用: C:\>netstat -aon|findstr "5037" 看到了吗,端口被进程号为5037的进程占用,继续执行下面命令(也可以去任务管理器中 ...
- 【Python046--魔法方法:描述符】
一.描述符的定义: 描述符就是将特殊类型的类的实例指派给另外一个类的属性 1.举例: 特殊类型的类要实现以下三个方法中的其中一个或者全部实现 * __get__(self,instance,owner ...