基于ArcGIS10.0和Oracle10g的空间数据管理平台十八(C#开发)-数据字典编辑
我的新浪微博:http://weibo.com/freshairbrucewoo。
欢迎大家相互交流,共同提高技术。
今天继续接着前面介绍的开发通用空间数据管理平台这个项目进行讲解,今天介绍的内容比较简单,就是通过界面来实现数据字典的编辑。至于数据字典的概念大家可以网上查找,以前我有一篇博客专门针对这个项目中用到的专业术语进行过讲解,也可以去查看一下。
介绍的思路还是按照当时自己在实现这个功能的思路,基本上还原当时怎样一步一步把这个相对简单的功能实现的。
1.定义用到的成员变量。
- private OracleCommandBuilder builder;//命令构建
- private OracleDataAdapter da;//数据适配器
- private DataSet ds;//数据集
- private string selectedNodeText;//保存选择树形节点的文本内容
- private string tableName;//表的名称
- protected OracleConnection Connection;//连接数据库
- private bool isChanged = false;//控件中的内容是否改变
2.在form的装载函数中初始化界面的相关控件,让这些控件都处于一个正常的显示状态并且为后面的操作做好准备。
- private void DataDictionaryEdit_Load(object sender, EventArgs e)
- {
- //加载相应的数据字典表到Tree
- Connection = new OracleConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
- Node tn = new Node();
- tn.Text = "数据字典表";
- advTree1.Nodes.Add(tn);
- Node n1 = new Node();
- n1.Text = "数据分类表";
- Node n2 = new Node();
- n2.Text = "要素类别表";
- Node n3 = new Node();
- n3.Text = "图层表";
- Node n4 = new Node();
- n4.Text = "字段定义表";
- tn.Nodes.Add(n1);
- tn.Nodes.Add(n2);
- tn.Nodes.Add(n3);
- tn.Nodes.Add(n4);
- }
3.通过树形控件选择相应的节点以后,通过树形节点的文字(代表表名称)选择一个表的内容加载到datagridView控件中,并且实现分页显示功能。
- //选择相应的表以后加载数据到DataGridView中
- private void advTree1_AfterNodeSelect(object sender, AdvTreeNodeEventArgs e)
- {
- Node tn = new Node();
- tn = e.Node;
- selectedNodeText = tn.Text;
- switch (tn.Level)
- {
- case 1:
- labelX1.Text = "";
- labelX1.Text = "当前数据表: " + tn.Text;
- if (Connection.State != ConnectionState.Open)
- {
- Connection.Open();
- }
- if (tn.Text == "数据分类表")
- {
- tableName = "jcsjk_category";
- }
- else if (tn.Text == "要素类别表")
- {
- tableName = "jcsjk_element";
- }
- else if (tn.Text == "图层表")
- {
- tableName = "jcsjk_layer";
- }
- else if (tn.Text == "字段定义表")
- {
- tableName = "jcsjk_fielddefine";
- }
- string sql = "select * from " + tableName;
- da = new OracleDataAdapter(sql, Connection);
- builder = new OracleCommandBuilder(da);
- ds = new DataSet();
- da.Fill(ds, tableName);
- dataGridViewX1.DataSource = ds.Tables[0];
- int intMod, dgr;
- //先让垂直滚动条消失
- dataGridViewX1.ScrollBars = ScrollBars.Horizontal;
- //取出DGV的行数,为什么要减一是因为它总是多出一行给你编辑的所以那行也占用一行的空间
- dgr = dataGridViewX1.RowCount - 1;
- //进行取模
- if (dgr % 10 == 0)
- {
- intMod = 0;
- }
- else
- {
- intMod = 1;
- }
- //主要时这个for循环将表一共分为几页添加到comboBox
- comboBoxEx1.Items.Clear();
- for (int i = 1; i <= dgr / 10 + intMod; i++)
- {
- comboBoxEx1.Items.Add("第" + i + "页");
- }
- //默认选中第一个
- if (comboBoxEx1.Items.Count > 0)
- {
- comboBoxEx1.SelectedIndex = 0;
- }
- break;
- default:
- break;
- }
- }
4.在控件增加和删除一条记录,此时还没有更新到数据库,需要保持以后才真正进入数据库中,后面一个功能实现。
- //删除一条记录
- private void delBtn_Click(object sender, EventArgs e)
- {
- if (!dataGridViewX1.AllowUserToDeleteRows)
- {
- dataGridViewX1.AllowUserToDeleteRows = true;
- }
- if (dataGridViewX1.CurrentRow.Index < 0)
- {
- MessageBox.Show("请选择需要删除的一行");
- return;
- }
- isChanged = true;
- ds.Tables[0].Rows[dataGridViewX1.CurrentRow.Index].Delete();
- }
- //增加一条记录
- private void addBtn_Click(object sender, EventArgs e)
- {
- if (!dataGridViewX1.AllowUserToAddRows)
- {
- dataGridViewX1.AllowUserToAddRows = true;
- }
- if (dataGridViewX1.ReadOnly)
- {
- dataGridViewX1.ReadOnly = false;
- }
- isChanged = true;
- dataGridViewX1.FirstDisplayedScrollingRowIndex =
- dataGridViewX1.Rows[dataGridViewX1.RowCount - 1].Index;
- }
5.把控件中改动、增加或删除的内容更新到数据库中去,可以同时对控件中的内容进行增加、删除和修改,然后一次性更新到数据库,但是每次只能操作一个数据字典表。
- //修改后的数据保存到数据库中去
- private void saveBtn_Click(object sender, EventArgs e)
- {
- int result = 0;
- if (isChanged)
- {
- try
- {
- result = da.Update(ds, tableName);
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- isChanged = false;
- dataGridViewX1.ReadOnly = true;
- dataGridViewX1.AllowUserToAddRows = false;
- dataGridViewX1.AllowUserToDeleteRows = false;
- if (result > 0)
- {
- LogHelp.writeLog(FrmMain.username, "数据字典编辑",
- "数据字典" + selectedNodeText + "编辑成功");
- MessageBox.Show("更新数据库成功");
- }
- else
- {
- LogHelp.writeLog(FrmMain.username, "数据字典编辑",
- "数据字典" + selectedNodeText + "编辑失败");
- MessageBox.Show("数据库没有更新");
- }
- }
6.其他辅助小功能。
- //使能编辑
- private void editBtn_Click(object sender, EventArgs e)
- {
- if (dataGridViewX1.ReadOnly)
- {
- dataGridViewX1.ReadOnly = false;
- }
- }
- //检查数据录入格式
- private void dataGridViewX1_DataError(object sender, DataGridViewDataErrorEventArgs e)
- {
- labelX2.Text = "数据录入格式不正确";
- }
- //记录值是否发生改变
- private void dataGridViewX1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
- {
- isChanged = true;
- }
- //DataGridView全部可见
- private void showAllBtn_Click(object sender, EventArgs e)
- {
- dataGridViewX1.ScrollBars = ScrollBars.Both;
- try
- {
- dataGridViewX1.FirstDisplayedScrollingRowIndex = 0;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- }
- //显示第几页数据
- private void comboBoxEx1_SelectedIndexChanged(object sender, EventArgs e)
- {
- try
- {
- dataGridViewX1.FirstDisplayedScrollingRowIndex = comboBoxEx1.SelectedIndex * 10;
- }
- catch (ArgumentOutOfRangeException)
- {
- }
- }
其他功能主要包括:定位显示第几页的数据、使能控件可以编辑、输入控件值的有效性检查等。
7、总结。
这里所谓的数据字典编辑其实也就是针对几个表进行操作,和普通的数据库表操作完全一样,只是根据功能记录的数据类型不一样而已,数据字典可能听起来更加专业一些,它的作用更加突出明显一些。