C#二十八 数据绑定

简介: C#二十八 数据绑定

    在Windows中绑定是将操作界面和数据源的数据保持一致,即实现操作界面的增删改查与数据库的增删改查一致,这里所说的数据源指数据集或数据表,而窗体可以是Windows窗体或Web窗体,在这里,我们研究关于Windows窗体的数据绑定,一般分为两种类型:简单绑定和复杂绑定。简单绑定是指将一个控件的某个属性绑定到某个数据元素(如数据集表中列的值)的能力,这是用于TextBox或Label等控件的典型绑定类型。复杂绑定指将一个控件绑定到多个数据元素的能力,通常绑定到数据库的多条记录,如DataGridView就可以绑定到一个DataTable,一次显示多条记录和多个字段的值。

重点:

Ø      掌握 DataGridView 控件的使用

Ø      DataGridView常用属性和方法

Ø      简单绑定

Ø      利用绑定控件从数据源读取数据

预习功课

Ø      如何使用DataGridView

Ø      DataGridView常用属性和方法

Ø      简单绑定

5.1 DataGridView控件

   在项目开发中,怎么样将数据库的中数据显示到界面上呢?在.Net中提供了DataGridView控件使我们可以显示表格数据,DataGridView控件除了可以直接显示数据表数据外,还支持排序、数据绑定以及创建自己的单元格类型、自定义控件外观等高级功能。


   DataGridView控件里面的数据通常是使用绑定的方式提供的,比如你可以把DataGridView控件绑定到数据集中的数据表,那么DataGridView控件就会自动显示这个数据表中的数据,如上图,我们就是这样操作的。另外,DataGridView控件的绑定功能是非常强大的,它不仅可以绑定数据表,还可以绑定数据集、数据视图、集合、数组等。

5.1.1 DataGridView的属性和方法

 DataGridView控件常用的重要属性和事件

属性

说明

Columns

包含的列的集合

DataSource

DataGridView 的数据源

ReadOnly

是否可以编辑单元格

DataPropertyName

绑定的数据列的名称

HeaderText

列标题文本

Visible

指定列是否可见

Frozen

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

ReadOnly

指定单元格是否为只读

ColumnCount

DataGridView中显示的列数

RowCount

DataGridView中显示的行数

Rows

所有控件的行

CurrentCell

当前单元格

CurrentRow

当前单元格的行

SelectedRows

用户选定的行

DataMember

数据源绑定的数据集,这里是数据表的名称

DefaultCellStyle

单元格的默认外观样式

事件

说明

CurrentCellChanged

单击单元格时发生

CellContentClick

单击某个单元格时发生

从窗体设计工具箱窗口的“数据”卡片中拖一个DataGridView控件进窗体设计区域即可创建一个DataGrid控件对象。然后可以在DataGridView控件属性窗口设置控件相关的属性,除了上面表格提到的属性外,在DataGridView控件的属性窗口中我们还可以看到很多其他常用的属性,比如:


l       Dock属性:可以设置控件填充父容器的方式


l       ReadOnly属性:设置控件是否可编辑,设置false后,控件将不可编辑


l       RowHeaderVisible属性:列标题是否显示,默认情况下显示列标题


l       MultiSelect属性:是否允许选择多行


5.1.2 将DataGridView绑定到数据集


   将DataGridView属性绑定到数据源,通过设置其DataSource属性,可将DataGridView控件直接绑定到数据源,数据源可以是数组、集合或数据集。通过DataSource属性将DataGridView控件绑定到数据集通常有三种形式:  

一.   直接绑定数据表
dataGridView1.DataSource=ds.Tables[0];
二.   绑定数据表的数据视图
dataGridView.DataSource=ds.Tables[0].DefaultView;
三. 绑定到数据集
dataGridView.DataSource=ds;
dataGridView.DataMember=ds.Tables[0].TableName;

  在第三种方式中,我们知道DataGridView控件每次只能显示一个数据表,所以你一旦绑定了一个数据集,那么你必须使用DataMember属性指定DataGridView控件显示到底是数据集里面的哪个表,因此要给DataMember属性设置一个数据集中数据表的名称。


5.1.3 定制DataGridView控件

    DataGridView控件默认情况下允许进行编辑、支持自动排序、支持选择模式、调整列间距等操作,用户可以在列标题上单击该列进行排序,排序时会根据列的不同类型进行排序,如果该列是数字那么就按大小排序,如果是字符那么就按字符顺序排序。用户可以自己设置单选、多行选择等选择模式,以便方便地选中列表中的数据。用户还可以在标题之间的列分隔符上双击,使左边的列自动按照单元格的内容展开或收缩。


   下面是DataGridView控件的组成图(图15.9),我们将依据这幅组成图来详细讨论DataGridView单元格值的获取以及单元格、行、列等外观的设置。


      DataGridViewColumn       image.png  

DataGridView控件的构成类似于表格的构成,简单地讲分成行和列。DataGridView控件每一行都是一个DataGridViewRow对象,每一行中按照列划分为很多单元格,每一个单元格就是一个DataGridViewCell对象。除了行和列外,DataGridView控件还有列标题和行标题,列标题和行标题没有对应的类,但DataGridView控件中有很多属性可以设置这两个组成部分的外观。


   你可以像获取数据表数据那样获取DataGridView控件中任意一个单元格的数据,因为DataGridView控件中表示行的集合也是Rows,在每一行对象(DataGridViewRow对象)中又有一个Cell属性可以获取该行的某一列。可以使用如下代码遍历DataGridView控件中的全部数据:  

foreach(DataGridViewRow r  in this.dataGridView.Rows)
    {
       //打印每一个单元格值
       for(int i=0;i<r.Cells.Count;i++)
       {
           Console.WriteLine(r.Cells[i].Value);
      }
}

要想获得你选中的某一行或某一列单元格的值,就需要用到前面提到的CurrentRow和CurrentCell两个属性,分别返回选中的行对象和返回选中的单元格对象。通过这两个属性可以找到需要的单元格的值。例如:

privatev oid dataGridView_CurrentCellChanged(object sender,EventArgs e)
{
    //获取当前选中单元格的列标
    intN=this.dataGridView.CurrentCellAddress.X;
    //获取当前行列标为N的那个单元格的值
    stringval=this.dataGridView.CurrentRow.Cells[N].Value.ToString();
    //直接使用CurrentCell来获得选中单元格的值
    //stringval=this.dataGridView.CurrentCell.Value.ToString();
}
DataGridView控件提供了CurrentCellAddress属性来获得选中单元格的列表和行标,如下代码修改DataGridView中选中的单元格中对应表中项的值:
private void dataGridView_CellContentClick(object sender,DataGridViewCellEventArgs e)
{
    //获得绑定的数据表
    DataTabledt=(DataTable)this.dataGridView.DataSource;
    int x=dataGridView.CurrentCellAddress.X; //获得行标
    int y=dataGridView.CurrentCellAddress.Y; //获得列标
    //显示当前单元格的值
    MessageBox.Show(this.dataGridView.Rows[x].Cells[y].Value.ToString());//
    //修改此单元格对应的数据表中项的值
    dt.Rows[x][y]=”修改值”;
//更新到数据库
adapter.Update(dt);
dt.AcceptChanges();
}

  DataGridView除了提供灵活的数据访问和编辑功能外,还提供强大的外观设置功能,设置DataGridView控件的外观也是按照上图提示的DataGridView控件的组成而来的。算起来我们总共可以从五个方面设置DataGridView的外观,分别是行外观、列外观、行标题外观、列标题外观和总外观。下面分别从如下五个方面进行讨论:


n       总外观设置


BackgroundColor:设置其背景颜色


BorderStyle:设置边框样式


CellBorderStyle:设置其单元格边框样式


DefaultCellStyle:设置单元格具体样式(字体颜色、字体种类、对齐方式和数据格式等)


GridColor:设置网格线颜色


n       列标题外观


ColumnHeadersBorderStyle:设置列标题的边框样式


ColumnHeadersDefaultCellStyle:设置列标题样式


ColumnHeadersHeight:设置列标题的高度


ColumnHeadersVisible:设置列标题是否显示


n       行标题外观


RowHeadersBorderStyle:设置行标题的边框样式


RowHeadersDefaultCellStyle:设置默认行标题样式


RowHeadersWidth:设置行标题列的宽度


RowHeadersVisible:设置行标题是否显示


n       行外观


RowTemplate:设置一个行模板,从而达到设置行外观的目的


RowsDefaultCellStyle:设置该行的字体颜色、字体种类、对其方式和数据格式等


n       列外观


DataGridView控件的列外观在其Columns属性设置。在Columns属性里面你可以对每一列进行外观的设置。每一列都含有Width、ColumnType、DefaultCellStyle等属性。其中每一列的Width属性可以设置列宽。


DefaultCellStyle:设置该列单元格的属性(字体颜色、字体种类、对齐方式和数据格式等)


ColumnType:设置单元格的类型,包含六种类型:DataGridViewButtonColumn、DataGridViewCheckBoxColumn、DataGridViewComboBoxColumn、DataGridViewImageColumn、DataGridViewTextBoxColumn、DataGridViewLinkColumn


目录
相关文章
|
2月前
|
SQL 开发框架 .NET
C#一分钟浅谈:数据绑定与数据源控件
在Web开发中,数据绑定和数据源控件是实现动态网页的关键技术。本文从基础概念入手,详细讲解数据绑定的原理及其在ASP.NET中的应用,并介绍常见数据绑定方式:手动绑定和自动绑定。接着,文章重点介绍了ASP.NET中的数据源控件,如`SqlDataSource`、`ObjectDataSource`、`XmlDataSource`和`LinqDataSource`,并通过具体示例演示如何使用`SqlDataSource`和`GridView`进行数据绑定。最后,还列举了一些常见问题及其解决办法,帮助读者更好地理解和应用这些技术。
75 4
|
4月前
|
C#
WPF/C#:数据绑定到方法
WPF/C#:数据绑定到方法
44 0
C# Xamarin数据绑定入门基础
C# Xamarin数据绑定入门基础
172 0
C# Xamarin数据绑定入门基础
|
测试技术 数据库 索引
c#DataGridView数据绑定示例——格式化单元格的内容
c#DataGridView数据绑定示例 格式化单元格的内容 在使用DataGridView显示数据库中的数据时,我们需要对某列的数据显示格式进行格式化。 这里使用实时构建的数据,如下图: 在显示时对第三列的数据进行格式化,如下图: 测试数据构建及数据绑定: priv...
979 0
|
7月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
204 3
|
7月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
202 3
|
29天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
32 3
|
3月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
46 2