c textbox操作mysql_ACCP学习旅程之-----使用C#开发数据库应用程序(第八章 用DataGridView显示和操作数据库)...

这篇博客介绍了在C#中使用DataSet对象离线操作数据库数据,解释了DataSet的性质和作用,以及如何创建和填充DataSet。接着,讨论了DataAdapter对象在数据交互中的角色,如何使用它填充和更新数据。此外,还详细阐述了如何使用DataGridView控件显示和编辑数据,包括设置DataSource、更新数据和判断查询结果。最后,提到了在数据操作中的注意事项和技巧,如数据集的更新和DataGridView的使用细节。
摘要由CSDN通过智能技术生成

1¥ DataSet(数据集)对象

DataSet是数据集对象,利用数据集,可以在断开数据库连接的情况下操作数据,也可以操作多个数据源的数据。

1$ 认识DataSet对象

1.。数据集把应用程序需要的数据临时保存在本机内存中。

数据都缓存在本地机器上,不需要一直保持和数据库的连接

2.。应用程序直接从内存中的数据集读取数据,并可以对数据集中的

数据进行修改,将修改后的数据一起提交给数据库。

3.。数据集不直接和数据库打交道,通过.NET数据提供程序来完成

和数据库的相互作用,所以独立于任何数据库。

4.。数据集中也包含多个表

数据集中的数据表集合: DataTableCollection

数据集中的每个数据表都是一个 DataTable 对象

数据表中列构成的集合: DataColumnCollection

每一个数据列: DataColumn

数据表中行构成的集合: DataRowCollection

每一个数据行: DataRow

如://打印数据集中的新建表Question中的内容

foreach (DataRow row in dSet.Tables["Question"].Rows)

{

//输出题目和选项

Console.WriteLine("{0}\nA.{1}\nB.{2}\nC.{3}\nD{4}",

row["Question"], row["OptionA"], row["OptionB"],

row["OptionC"], row["OptionD"]);

//输出答案、难度

Console.WriteLine("正确答案{0}\n难度{1}",

row["Answer"],row["Difficulty"]);

//换行

Console.WriteLine();

说明:DataRow 表中的每一行数据

row     循环中定义的代表某一行数据的变量

Tables  数据集中所有表的集合

Rows    数据集中某表中的所有行的集合

2$ 如何创建DataSet(数据集)

语法: DataSet 数据集对象 = new DataSet(“数据集的名称字符串”);

数据集的名称字符串可以有,也可没有,如没有,默认为NewDataSet。

如:DataSet myDataSet = new DataSet();

或:DataSet myDataSet = new DataSet(“MySchool”);

2¥ DataAdapter(数据适配器)对象

1$ 认识DataAdapter对象

1.。.NET数据提供程序及其DataAdapter类

SQL数据提供程序:SqlDataAdapter

使用System.Data.SqlClient命名空间

其他数据库提供程序的DataAdapter类,暂略。。。。。。

2.。数据适配器通过其属性SelectCommand调用一个Command命令,

可以从数据库中读取数据

3.。数据适配器要把数据放在数据集(DataSet)中,需要使用

DataAdapter的Fill()方法

4.。数据适配器对象要把修改过的数据保存到数据库,需要使用

DataAdapter的Update( )方法

2$ 如何填充数据集

1.。创建数据库连接对象(Connetion对象)

2.。创建从数据库查询数据用的SQL语句

3.。利用上面的SQL语句和Connection对象创建DataAdapter对象

语法:

SqlDataAdapter 对象名 = new SqlDataAdapter

(查询用的SQL语句,数据库连接);

4.。调用DataAdapter对象的Fill()方法填充数据集

语法:

DataAdapter对象.Fill(数据集,“数据表名称字符串”);

特别注意:Fill()方法接收一个数据表名称的字符串参数

数据集中如没有这个表,则会在数据集中创建一个新表

数据集中如果有这个表,则会把查出的数据添加到这个数据表中

特别注意:

1)    数据集中的表,按顺序索引引用,如:dataSet.Tables[0]

2)    数据集中的某表的所有行对象的集合,引用,如:

dataSet.Tables[0].Rows(可用于foreach)

3)    数据集中某表行中的列值,用“数据行对象[“列名”]”取出

如: row[“TeacherId”]//表中某行列名为TeacheId的数据

3$ 如何保存数据集中的数据

对数据库中的数据进行更新时,需要相关的命令,.NET提供了一个SqlCommandBuilder对象(构造SQL命令),可以自动生成更新数据库时需要使用的命令。

步骤:

1)使用SqlCommandBuilder对象生成更新用的相关命令

语法:

SqlCommandBuilder builder =

new SqlCommandBuilder(已创建的DataAdapter对象)

2)调用DataAdapter对象的Update()方法

作用:将Fill()好的DataSet对象中某个表中的内容向数据库中更

新,更新命令SqlCommandBuilder对象自动生成。

语法:

DataAdapter对象.Update(数据集对象,“数据表名称字符串”)

特别注意:SqlCommandBuilder只能操作单个表,即DataAdapter对象中

使用的SQL语句只能从一个表里查询数据,不能是进行联合

查询的语句。

特别注意:*** 用Update()方法去更新的表,必须是有主键的表***

实例见上机任务8 作业3 代码

3¥ DataGridView(数据网格视图)控件

1$ 认识DataGridView控件

1)DataGridView控件,在其中的数据可以直接修改和删除,就像操

作Excel一样方便。

2)以表格形式显示数据,可以设置为只读,也可以允许编辑数据

3)通过设置DataSource属性指定DataGridView显示那个表的数据

如:dgvCheck.DataSource = dataSet.Tables["Student"];

4)DataGridView控件的主要属性

Columns         包含的列的集合

DataSource       DataGridView的数据源

ReadOnly        是否可以编辑单元格

5)通过Columns属性可以设置DataGridView中每一列的属性

包括:列宽、列名、是否只读、是否冻结、

对应数据表中的那一列等

6)DataGridView控件中各列的主要属性

DataPropertyName      绑定的数据列的名称

HeaderText            列标题文本

Visible                指定列是否可见

Frozen             指定水平滚动DataGridView时,列是否移动

ReadOnly           指定单元格是否为只读

2$ 如何使用DataGridView显示数据

1)创建数据库连接对象(Connection)

2)创建从数据库查询数据用的SQL语句

3)利用上面的SQL语句和Connection对象创建DataAdapter对象

SqlDataAdapter 对象名=new SqlDataAdapter(Sql语句,数据库连接);

4)调用DataAdapter对象的Fill()方法填充数据集

DataAdapter对象名。Fill(数据集对象,“数据表名称字符串”);

关于“数据表名称字符串”:

如数据集中原来就有—查询结果将继续添加到这个表中

如数据集中原来没有---在数据集中创建这个表,来存放查询结果

5)以上工作都做完后,还需在代码中指定DataGridView的数据源

如://指定DataGridView的数据源

dgvTeacher.DataSource=dataSet.Tables[“Teacher”];

注意:数据源一旦指定,如没有语句重新指定数据源,则不会发生

变化,即使数据集发生了重填或更新,也不用重新指定数据

源。

但如果数据源根据需要被清空了,再次查询时,就必须重新

指定数据源了。

3$ 如何利用数据集的更新,从而保存修改后的数据

1。。如果在DataGridView中修改数据,一般都要求用户确认修改,方

法是定义一个DialogResul变量,获取用户的选择。

如:DialogResult dialog = MessageBox.Show("是否确认修改!", "操

作提示", MessageBoxButtons.YesNo,

MessageBoxIcon.Information);

2。。用户确认后,在进行更新数据集操作。

1)更新了查询语句,重新填写数据集后更新

如://清空数据集表中原有的数据

dataSet.Table[“Stuedent”].Clear();

//重新指定DataAdapter对象的查询语句

dataAdapter.SelectCommand.CommandText=sql;//(新语句)

//用新的查询结果填充数据集

dataAdapter.Fill(dataSet,”Student”);

2)不更新查询语句,在控件单元格中直接更改数据后更新

(示例见BudgetForm.cs)

如://创建一个SqlCommandBuilder对象,用以自动生成

更新命令(基于已建好的DataAdapter对象)

SqlCommandBuilder builder=new SqlCommandBuilder(dataAdapter);

//用新的命令更新数据集

dataAdapter.Update(dataSet,”Teacher”);

关于SqlCommandBuilder:

SqlCommandBuilder只能操作单个表,不能进行联合查询

即,使用Update()方法更新后的数据只能写到一个表中。

4$ DataGridView中如何得知查询是否有结果

类似的:ListView中如没有查询结果时,可判断dr.HasRows是否为真

而在DataGridView中,可以使用

“dataSet表名[0]。Rows。count==0”

来判断是否有查询结果。

如:if (dataSet.Tables[0].Rows.Count == 0)   //判断表中是否有查询结果

特别注意:在重新填充数据集前,要把原来表清空,需调用Clear()方法。

如:dataSet.Tables["Student"].Clear();

然后重新为DataAdapter对象指定查询的SQL语句,这时需使

用它的SelectCommand.CommandText属性。

如:

//清空表中原有的数据

dataSet.Tables["Student"].Clear();

//重新指定DataAdapter对象的查询语句

dataAdapter.SelectCommand.CommandText = sql;

//使数据源失效,让DataGridView中的网格彻底消失

dgvCarsSearch.DataSource = null;

特别注意:

1)如何使文本框变成只读型式(文本框背景变暗,不能输入)

选中文本框的ReadOnly属性,设置成False

2)如何设置DataGridView中的数据行只能整行选取

选中DataGridView控件的SelectionModel属性,设置成

FullRowSelect

3)在程序代码中引用DataGridView控件中的行或列中的数据

如:

int id =Covert.ToInt32(dgvTicketInfo.SelectedRows[0].Cells[“Id”].Values);

SelectedRows    表示选中的所有行

SelectedRows[0]  表示选中的第一行

Cells            表示当前行中所有的单元格

Cells[“Id”]      表示行中名为Id列的单元格

Values           表示这个单元格中的值

4)如何引用DataRead.Read()方法读取结果中的数据

如:txtFrom.Text = dataReader["LeaveCity"].ToString();

作用:使名为txtFrom的文本框中显示Read()方法读到的行中名为“LeaveCity”的那一列的值,并转换成字符串格式。

很明显,引用方式为:DataReader对象名[“列名”]

5)如果ExecuteScalar()方法没有查询到数据,会返回一个DBNULL类型的数据(表示数据库的空值),可用于条件判断。

6)如何表示Cbo控件中选取了哪一项

Cbo控件中的选项可以通过LOAD事件载入,也可以在Items属性中手动设置。

载入或设置后的各个选项,有自己的从0开始的索引。可以再代码中用其索引,引用Cbo控件中的被选定的项。

如:if (cboSeatType.SelectedIndex < 0)

意为:如果名为cboSeatType的组合框中的选项的索引小于零。

根本不可能,亦即组合框中没有选项。

7)如何在代码中获取Rdo控件的文本内容(使用强制转换)

如:string answer = ((RadioButton)sender).Text;

8)如何使用ShortCutCase属性设置窗口的快捷键

选中窗体中的某个控件,该控件已经通过代码实现了某种特定的事件响应(如退出按钮的Click事件)

选中该控件的ShortCutCase属性,单击右侧的下拉按钮

在该属性列出的组合中选取适当的按钮组合,如:退出Alt+F4.

9)如何将标签或按钮等控件设置成透明

选中某标签或按钮,选择属性中的BackColor属性

将其设置成为Web选项卡中的Transparent

10)标签Text属性中的文本如何换行

设置该标签的AutoSize属性为False

默认为True,即自动调整标签宽度和大小,显示标签文本,不会自动换行

改为False后,标签的宽度是固定的,如果文本超过宽度,则自动换行。

11)如何设置DataGridView控件中的列宽

只能在DataGridView控件的Colums属性中打开编辑列窗口,然后再每列的设置选项中选取Width项手动设置宽度。

12)如何实现多个同种或不同种控件指向同一事件

多个控件的事件名同名

13)如何向Cbo控件中增加选项

Cbo控件中有Items属性,不仅可以手动输入Items项,也可以通过代码增加Items项。

如:  while (c.Read())  //执行Read()方法

{

SubjectName = (string)c[0];  //查询结果的第一列

cmbSubject.Items.Add(SubjectName);  //给cmb控件中增加选项

}

这里使用了Items属性的Add()方法,参数为接收Read()查询结果值得字符串变量。

14)如何在代码中引用Cmb控件中的选定项

cmbDiffLevel.SelectedItem

15)明确ListView和DataGridView的区别

???????????????????????????

16)如果程序中的SqlCommand对象多次使用,那么在再次使用

之前,必须再次指定新的SQL命令。

如:cd.CommandText = sql; //重新指定SQL命令

17)菜单项工具类(ToolStripMenuItem)的使用

详见:上机任务7  第四阶段

该类表示System.Windows.Forms.MenuStrip 或

System.Windows.Forms.ContextMenuStrip

显示的所有项的集合

如:(ToolStripMenuItem)sender).Tag

意为:将菜单项工具指向事件触发者(即

ToolStipMenuItem中的某行),并取其

Tag值

18)如何产生随机数

Random random = new Random();   //实例化Random对象

int n=random.Next(Num)

Num为取值范围数:0

实例见项目实战 4 p38页

19)Control类和Controls属性

应用如:(项目实战 P41页)

int index = 0;

foreach (Control item in this.Controls)    //检查窗体内的所有控件

{

if (item is Label)  //如果控件是标签

{

index = Convert.ToInt32(item.Tag); //将标签的Tag值赋给index

if (index!=-1)

{

//更改标签文本为相对应的答案值

item.Text = QuizHelpper.studentAnswers[index];

}

}

}

Control类:代表该窗体上的所有控件

Controls属性:用this引用的窗体属性,

this.Controls代表窗体上所有控件的集合。

item是实例化了的Control对象,代表窗体上的单个控件

foreach (Control item in this.Controls)    //检查窗体内的所有控件

{

if (item is Label)  //如果控件是标签

{

index = Convert.ToInt32(item.Tag);

if (index!=-1)

{

item.Text = QuizHelpper.studentAnswers[index];

}

}

}

20)控制标签的宽度和颜色,显示进展条

1.使用“标签名。Width”引用和改变标签的宽度

// 确定显示分数的label的宽度

lblResult.Width = lblFullMarkStrip.Width * score / 100;

2.使用“标签名。BackColor”引用和改变标签的背景颜色

lblResult.BackColor = Color.Red;

3.颜色的值应在前面加上Color类名。如:Color.Red

21)如何查询表中的标识列

如:项目实战 P61页

sql=”select @@Identity From Users”;

注意:要使用@@Identity查询标识列,前提是必须先用ExecuteNonQuery查

询出结果,然后再在结果中查询。

22)LinkLabel控件

类似于lbl控件,唯一的区别是控件自动显示为链接模式

至于链接到哪里,还是要用代码实现。

如:MyQQ/Register窗体中的“申请号码”标签

代码:RegisterForm registerForm = new RegisterForm();

registerForm.Show();   //显示了新窗体

this.Visible = false;  //隐藏了旧窗体

23)如何实现同一窗体上不同按钮或控件单击后,导致画面变化

在同一个窗体中,为了显示不同的内容,可以通过适时改变多个Panel控件的Visible属性来实现。

同时,为了使显示效果最佳,也可以通过Panel控件的Location属性,标定两个Panel的显示位置相同。

如:项目实战P68页

pnlBaseResult.Location=pnlBaseCondition.Location;

24)注意比较两种不同但很有用的清空语句

DataGridView控件中的清空

//清空数据集中的原有数据

dataSet.Tables["TicketInfo"].Clear();

ListView控件中的清空

listView1.Items.Clear();   //清空ListView控件中的原有内容

25)使用dataAdapter倒入cbo选项

try

{

//创建DataSet对象

DataSet ds = new DataSet();

//创建SQL语句

string sql = "select * from deptInfo";

//创建DataAdapter对象

SqlDataAdapter da = new SqlDataAdapter(sql, conn);

//填充数据集并命名表

da.Fill(ds, "deptName");

//利用DataSource属相倒入cbo选项

cboDeptName.DataSource = ds.Tables["deptName"];

//设置cbo的数据源

cboDeptName.DisplayMember = "DeptName";

//设置查询结果中的那一列在cbo中显示

//注意,只有设置了DisplayMember才显示,其他都不显示

cboDeptName.ValueMember = "id";

//设置将查询结果中的id值一同存入cbo控件的ValueMember中

}

26)在C#前台简化时间的输出形式

Convert.ToDateTime(dr[”bir”]).ToLongDateString());//2001年1月1日

Convert.ToDateTime(dr[”bir”]).ToShortDateString());//2001-1-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值