关闭

关闭

关闭

封号提示

内容

首页 C#网络应用编程基础 教学课件 ppt 作者 马骏2 第08章 ADO.NET与SQLServ…

C#网络应用编程基础 教学课件 ppt 作者 马骏2 第08章 ADO.NET与SQLServer.ppt.ppt

C#网络应用编程基础 教学课件 ppt 作者 马骏2 第08…

希望
2019-09-15 0人阅读 举报 0 0 暂无简介

简介:本文档为《C#网络应用编程基础 教学课件 ppt 作者 马骏2 第08章 ADO.NET与SQLServer.pptppt》,可适用于高等教育领域

全国最大的共享资料库,等您下载。本资料为C#网络应用编程基础 教学课件 ppt 作者 马骏2 第08章 ADO.NET与SQLServer.ppt.ppt文档,由吉林快3—吉林快三用户提供,以下为正文内容。

*第章ADONET与SQLServer背景知识创建数据库与数据库表ADONET数据访问对象数据绑定技术数据处理控件存储过程*背景知识ADONET是在ADO(ActiveXDataObjects)基础上发展的新一代数据存取技术是微软NET平台下提出的新的数据访问模型。ADONET设计了一系列对各类数据的访问形式并提供了对应的类类中提供了与对应数据交互的属性和方法我们可以通过这些属性和方法对各种数据进行存取操作。*背景知识(续)ADO:ActiveXDataObjects即ActiveX数据对象是一组优化的访问数据库的专用对象集。在NET之前的软件一般使用ADO对象。ADONET:在NET平台下重新设计的数据访问模型。它提供了一系列对各类数据的访问形式并提供了对应的类类中提供了与对应数据交互的属性和方法编程者可以通过这些属性和方法方便的对各种数据进行存取操作例如数据库、XML等。*背景知识(续)VS开发环境下使用的是ADONET。在ADONET中SQL数据提供程序使用统一的SQL数据访问模型实现对各种使用SQL语句的数据库的数据访问支持。例如Oracle、SQLServer、DB、Access等。*ADONET的最大特点:支持对数据的无连接方式的访问减少与数据库的活动连接数目。*背景知识(续)*背景知识(续)VS开发环境下可以直接使用SQLServerExpress管理本机数据库。*创建数据库与数据库表创建数据库的方式:在项目中直接创建数据库。选择菜单的【视图】【服务器资源管理器】然后通过【添加数据连接】创建数据库。通过选择菜单的【数据】【添加数据源】然后利用向导完成创建过程。*创建数据库与数据库表(续)【例】创建数据库MyDatabasemdf并将其保存在项目所在的文件夹中然后在数据库中创建表MyTable、MyTable和MyTable并利用查询设计器创建和运行查询语句体会系统提供的功能。*ADONET数据访问对象ADONET提供了多种对象模型比较典型的有:SqlConnection对象SqlCommand对象SqlDataReader对象SqlDataAdapter对象SqlParameter对象SqlTransaction对象这些对象提供了对SqlServer数据源的各种不同的访问功能全部归类在SystemDataSqlClient命名空间下。*SqlConnection对象ADONET使用SqlConnection对象与SQLServer进行连接。但是要在SqlConnection对象中指定一个连接字符串。*SqlCommand对象在ADONET中有两种操作数据库的方式:()采用无连接的方式。()采用保持连接的方式。不论采用哪种方式都可以通过SqlCommand对象提供的方法传递对数据库操作的命令并返回命令执行的结果。*SqlCommand对象(续) 在保持连接的方式下操作数据库的一般步骤为:)创建SqlConnection的实例)创建SqlCommand的实例)打开连接)执行命令)关闭连接。*SqlCommand对象提供了多种完成对数据库操作的方法。常用有:ExecuteNonQuery该方法执行SQL语句的结果但不返回命令执行的表数据仅返回操作所影响的行数。*SqlCommand对象(续)【例】将MyTable中张三玉的成绩增加分*SqlCommand对象(续)stringconnectionString=PropertiesSettingsDefaultMyDatabaseConnectionString根据连接字符串创建SqlConnection实例SqlConnectionconn=newSqlConnection(connectionString)创建SqlCommand实例并设置SQL语句和使用的连接实例SqlCommandcmd=newSqlCommand()cmdCommandText=updateMyTableset成绩=成绩where姓名=#张三玉#cmdConnection=conntry{*SqlCommand对象(续)connOpen()将执行SQL语句影响的记录数赋值给numberintnumber=cmdExecuteNonQuery()MessageBoxShow(stringFormat(修改了{}条记录,number))}catch(Exceptionerr){MessageBoxShow(errMessage,修改记录失败)}finally*SqlCommand对象(续){if(connState==ConnectionStateOpen){connClose()}}}*SqlCommand对象(续)ExecuteReaderExecuteReader方法提供了只向前的、顺序的快速读取数据库中数据的方法。该方法根据提供的SELECT语句返回一个可以顺序读取的SqlDataReader对象编程者可以使用Read方法循环依次读取每个记录中各字段(列)的内容。*SqlCommand对象(续)【例】在ListBox中按自定义格式显示MyTable的编码对照表。*SqlCommand对象(续)privatevoidbuttonShowMyTableClick(objectsender,EventArgse){SqlConnectionconn=newSqlConnection(PropertiesSettingsDefaultMyDatabaseConnectionString)SqlCommandcmd=newSqlCommand(select*fromMyTable,conn)try{connOpen()SqlDataReaderr=cmdExecuteReader()while(rRead()==true)*SqlCommand对象(续){listBoxItemsAdd(stringFormat({}{},r,r))}rClose()}catch(Exceptionerr){MessageBoxShow(errMessage,读取记录失败)}finally{connClose()}}*SqlCommand对象(续)ExecuteScaler()该方法用于执行SELECT查询得到的返回结果为一个值的情况比如使用count函数求表中记录个数或者使用sum函数求和等。*SqlCommand对象(续)【例】统计MyTable中所有姓王的人数及成绩的和。privatevoidbuttonCountClick(objectsender,EventArgse){SqlConnectionconn=newSqlConnection(PropertiesSettingsDefaultMyDatabaseConnectionString)SqlCommandcmd=newSqlCommand()cmdConnection=conntry*SqlCommand对象(续){connOpen()cmdCommandText=selectcount(*)fromMyTablewhere姓名like#王#intrecord=(int)cmdExecuteScalar()cmdCommandText=selectsum(成绩)fromMyTablewhere姓名like#王#doublesumValue=ConvertToDouble(cmdExecuteScalar())MessageBoxShow(stringFormat(有{}条姓王的记录合计成绩为{},record,sumValue))}catch(Exceptionerr)*SqlCommand对象(续){MessageBoxShow(errMessage)}finally{connClose()}}*SqlDataAdapter对象SqlDataAdapter对象通过无连接的方式完成数据库和本地DataSet之间的交互。一般步骤:)创建SqlConnection的实例)创建SqlDataAdapter的实例需要的话根据select语句生成其他SQL语句)创建DataSet的实例)使用Fill方法将数据库中的表填充到DataSet表中)利用DataGridView或者其他控件对象编辑或显示数据)需要的话使用Update方法更新数据库。*SqlDataAdapter对象(续)SqlDataAdapter对象通过SelectCommand、InsertCommand、UpdateCommand和DeleteCommand属性为后台数据库提供对应的操作命令并传递需要的参数。一般情况下只需要提供SELECT语句和连接字符串创建SqlDataAdapter对象然后利用SqlCommandBuilder对象生成InsertCommand、UpdateCommand和DeleteCommand属性。*SqlDataAdapter对象(续)【例】根据选择的表名称打开指定数据库中的表并将表中数据通过DataGridView显示出来。*SqlDataAdapter对象(续)stringtableName=(radioButtonMyTableChecked==trueMyTable:MyTable)stringconnectionString=PropertiesSettingsDefaultMyDatabaseConnectionStringSqlConnectionconn=newSqlConnection(connectionString)adapter=newSqlDataAdapter(select*fromtableName,conn)SqlCommandBuilderbuilder=newSqlCommandBuilder(adapter)adapterInsertCommand=builderGetInsertCommand()adapterDeleteCommand=builderGetDeleteCommand()adapterUpdateCommand=builderGetUpdateCommand()*SqlDataAdapter对象(续)table=newDataTable()adapterFill(table)dataGridViewDataSource=table}privatevoidbuttonSaveClick(objectsender,EventArgse){dataGridViewEndEdit()try{adapterUpdate(table)*SqlDataAdapter对象(续)MessageBoxShow(保存成功!)}catch(SqlExceptionerr){MessageBoxShow(errMessage,保存失败!)}}*DataTable对象ADONET可以在与数据库断开连接的方式下通过DataSet或DataTable对象进行数据处理当需要更新数据时才重新与数据源进行连接并更新数据源。DataTable对象表示保存在本机内存中的表它提供了对表中行列数据对象的各种操作。可以直接将数据从数据库填充到DataTable对象中也可以将DataTable对象添加到现有的DataSet对象中。*DataTable对象(续)【例】将SQLServer数据库中的表MyTable填充到DataTable对象中并在DataGridView中显示表数据。*DataTable对象(续){stringconnectionString=PropertiesSettingsDefaultMyDatabaseConnectionStringSqlConnectionconn=newSqlConnection(connectionString)SqlDataAdapteradapter=newSqlDataAdapter(select*fromMyTable,conn)DataTabletable=newDataTable()adapterFill(table)dataGridViewDataSource=table}*DataSet对象创建DataSet对象使用创建的DataSet对象可以完成各种数据操作。注意:利用向导生成的数据库数据源是一个强类型的DataSet以及一对或多对强类型的DataTable和TableAdapter的组合。类型化的DataSet是一个生成的类是从NETFramework的一般DataSet类衍生来的但提供了已定义的架构以及特定于该架构的属性和方法。同时对于DataSet中的每个表还生成了特定于该DataSet的附加衍生类而且每个类都为相关的表提供了特定的架构、属性和方法。当然也可以直接创建一般的DataSet对象如:DataSetmyDataset=newDataSet() *DataSet对象(续)填充DataSet对象创建DataSet后就可以使用SqlDataAdapter对象把数据导入到DataSet对象中比如通过Fill方法将数据填充到DataSet中的某个表中。*DataSet对象(续)【例】将SQLServer数据库中的表MyTable填充到DataSet的某个表中并在DataGridView中显示表数据。*DataSet对象(续)privatevoidFormDataSetLoad(objectsender,EventArgse){stringconnectionString=PropertiesSettingsDefaultMyDatabaseConnectionStringSqlConnectionconn=newSqlConnection(connectionString)*DataSet对象(续)SqlDataAdapteradapter=newSqlDataAdapter(select*fromMyTable,conn)DataSetdataset=newDataSet()如果不指定表名则系统自动生成一个默认的表名adapterFill(dataset)可以使用索引引用生成的表dataGridViewDataSource=datasetTables}*数据绑定技术实现数据绑定的方式有两种一种是设计时数据绑定另一种是运行时数据绑定。设计时数据绑定技术指在窗体界面上通过鼠标拖放操作或者直接设置被绑定控件的相关属性实现数据绑定运行时数据绑定技术指通过编写代码实现数据绑定。*DataSet设计器与数据源当创建了数据库、表与存储过程并生成解决方案后可以直接利用自动添加了的组件和连接字符串完成数据库相关的应用编程设计任务。*单个数据库表的绑定【例】将MyDatabasemdf添加到一个新建的项目中观察解决方案资源管理器、数据库资源管理器、数据源以及工具箱中都自动添加了哪些内容。将数据库添加到项目中就可以在设计时直接通过拖放操作完成简单数据库表的应用设计。*单个数据库表的绑定(续)【例】通过直接拖放完成对MyTable的数据编辑操作。*设计中常见的问题:如果在一个项目中已经实现了一些窗体功能在另一个项目中又想直接利用这些功能而不是重新设计可不可以实现呢?有三种实现的方式:第一种是将被引用的窗体做成dll文件然后调用。第二种方式是利用继承第三种方式是直接在原来的基础上修改。*单个数据库表的绑定(续)【例】编写程序完成例中的所有功能同时显示学院编码对应的名称。*单个数据库表的绑定(续)privatevoidbuttonImportPhotoClick(objectsender,EventArgse){OpenFileDialogopenFileDialog=newOpenFileDialog()if(openFileDialogShowDialog()==DialogResultOK){根据打开的图像文件创建原始图像大小的Bitmap对象Bitmapimage=newBitmap(openFileDialogFileName)按比例缩放显示(因为Picture的SizeMode属性为Zoom),但原始图像大小未变pictureBoxPhotoImage=image}}*单个数据库表的绑定(续)privatevoidbuttonRotatePhotoClick(objectsender,EventArgse){if(pictureBoxPhotoImage!=){旋转度pictureBoxPhotoImageRotateFlip(RotateFlipTypeRotateFlipNone)pictureBoxPhotoInvalidate()}}privatevoidbuttonClearPhotoClick(objectsender,EventArgse){pictureBoxPhotoImage=}*关联数据库表的绑定对于两个或者多个具有关联的表同样可以通过简单的拖放完成。【例】在例的基础上添加一个新窗体完成对MyTable的编辑操作要求用户处理某个记录时要能同时显示该学生所在的学院以及对应的家庭成员。*直接编写代码完成数据绑定运行时实现数据绑定的常用方法为:)从工具箱中拖放一个BindingSource组件一个自动生成的强类型的DataSet组件一个强类型的DataAdapter组件到设计窗体上。)从工具箱中拖放一个被绑定的控件到设计窗体上修改控件的【Name】属性为有意义的名称。)添加绑定代码。*直接编写代码完成数据绑定(续)在代码方式下大部分控件都是通过DataBindings属性的Add方法实现绑定的。下面通过具体例子列举一些常用控件的运行时绑定方法。*直接编写代码完成数据绑定(续)【例】设计一个运行效果如下图所示的编辑MyTable的Windows应用程序要求利用运行时数据绑定方法对学号、性别、出生日期、学院编码进行处理避免输入非法的信息。*privatevoidFormLoad(objectsender,EventArgse){填充数据集中的表myTableTableAdapterFill(myDatabaseDataSetMyTable)myTableTableAdapterFill(myDatabaseDataSetMyTable)设置dateTimePickerStudentBirthday显示格式*直接编写代码完成数据绑定(续)dateTimePickerStudentBirthdayFormat=DateTimePickerFormatCustomdateTimePickerStudentBirthdayCustomFormat=}privatevoidbuttonBindingClick(objectsender,EventArgse){设置数据源myTableBindingSourceDataSource=myDatabaseDataSetmyTableBindingSourceDataMember=MyTable*直接编写代码完成数据绑定(续)myTableBindingSourceDataSource=myDatabaseDataSetmyTableBindingSourceDataMember=MyTable绑定导航条myTableBindingNavigatorBindingSource=myTableBindingSource绑定maskedTextBoxStudentID到学号maskedTextBoxStudentIDDataBindingsAdd(Text,myTableBindingSource,学号)maskedTextBoxStudentIDMask=绑定textBoxStudentName到姓名textBoxStudentNameDataBindingsAdd(Text,myTableBindingSource,姓名)*直接编写代码完成数据绑定(续)绑定checkedListBoxStudentSex到性别checkedListBoxStudentSexItemsAddRange(newobject{男,女})checkedListBoxStudentSexDataBindingsAdd(SelectedItem,myTableBindingSource,性别)checkedListBoxStudentSexDataBindingsAdd(SelectedValue,myTableBindingSource,性别)checkedListBoxStudentSexCheckOnClick=truecheckedListBoxStudentSexMultiColumn=truecheckedListBoxStudentSexColumnWidth=绑定dateTimePickerStudentBirthday到出生日期*直接编写代码完成数据绑定(续)dateTimePickerStudentBirthdayDataBindingsAdd(Value,myTableBindingSource,出生日期)dateTimePickerStudentBirthdayFormat=DateTimePickerFormatShort绑定comboBoxStudentCollege到学院编码comboBoxStudentCollegeDataBindingsAdd(SelectedValue,myTableBindingSource,学院编码)comboBoxStudentCollegeDataSource=thismyTableBindingSourcecomboBoxStudentCollegeDisplayMember=名称comboBoxStudentCollegeFormattingEnabled=true*直接编写代码完成数据绑定(续)comboBoxStudentCollegeValueMember=编码绑定dataGridViewMyTable到MyTabledataGridViewMyTableDataSource=myTableBindingSource}privatevoidbuttonCancelBindingClick(objectsender,EventArgse){清除数据源注意应该先清除与BindingSource的绑定然后才能清除BindingSource的数据源*直接编写代码完成数据绑定(续)maskedTextBoxStudentIDDataBindingsClear()maskedTextBoxStudentIDText=textBoxStudentNameDataBindingsClear()textBoxStudentNameText=checkedListBoxStudentSexDataBindingsClear()checkedListBoxStudentSexItemsClear()dateTimePickerStudentBirthdayDataBindingsClear()dateTimePickerStudentBirthdayFormat=DateTimePickerFormatCustomdateTimePickerStudentBirthdayCustomFormat=comboBoxStudentCollegeDataBindingsClear()*直接编写代码完成数据绑定(续)dataGridViewMyTableDataSource=myTableBindingNavigatorBindingSource=myTableBindingSourceDataMember=myTableBindingSourceDataSource=myTableBindingSourceDataMember=myTableBindingSourceDataSource=}*直接编写代码完成数据绑定(续)privatevoidcheckedListBoxStudentSexSelectedIndexChanged(objectsender,EventArgse){if(checkedListBoxStudentSexSelectedIndex==){checkedListBoxStudentSexSetItemChecked(,true)checkedListBoxStudentSexSetItemChecked(,false)}elseif(checkedListBoxStudentSexSelectedIndex==)*直接编写代码完成数据绑定(续){checkedListBoxStudentSexSetItemChecked(,false)checkedListBoxStudentSexSetItemChecked(,true)}else{checkedListBoxStudentSexSetItemChecked(,false)checkedListBoxStudentSexSetItemChecked(,false)}}*BindingSource组件数据处理控件可以简化数据库相关应用程序的开发工作量提高开发效率。BindingSource组件的作用之一就是实现了统一的数据源绑定表达式。如下图:*BindingSource组件(续)将控件对象绑定到BindingSource对象的方式有下面几种:通过主菜单的【数据】【显示数据源】在【数据源】视图中直接拖放要绑定的表或者表中的字段到设计窗体上系统会自动产生对应的组件和控件对象。先将被绑定的控件从工具箱拖放到设计窗体上然后将【数据源】视图中的表或者表中的字段直接拖放到设计窗体中的控件对象上。*BindingSource组件(续)先将被绑定的控件从工具箱拖放到设计窗体上然后单击控件对象右上角的三角形符号选择要绑定的数据源。先将被绑定的控件从工具箱拖放到设计窗体上然后通过属性窗口的【(DataBindings)】属性选择绑定的对象。直接编写代码实现绑定。*BindingSource组件(续)BindingSource组件常用的属性主要有:)DataSource属性:获取或设置绑定到BindingSource的数据源。)Sort属性:获取或设置数据源中各列的排序字符串。)Filter属性:获取或设置数据源中记录筛选条件字符串。)Current属性:指绑定列表中的当前项。*BindingSource组件(续)【例】设计一个Windows应用程序显示本机当前支持的所有字体。*BindingSource组件(续)privatevoidFormBindingListLoad(objectsender,EventArgse){创建一个类型为Font的List泛型数组ListFontfonts=newListFont()读取所有支持的字体for(inti=iFontFamilyFamiliesLengthi){if(FontFamilyFamiliesiIsStyleAvailable(FontStyleRegular)){fontsAdd(newFont(FontFamilyFamiliesi,F,FontStyleRegular))*BindingSource组件(续)}}bindingSourceDataSource=fontslistBoxDataSource=bindingSource在列表项中绑定字体名称listBoxDisplayMember=Name将字体名称绑定到label的Text属性labelDataBindingsAdd(Text,bindingSource,Name)bindingNavigatorBindingSource=bindingSource}*BindingSource组件(续)privatevoidbindingSourceCurrentChanged(objectsender,EventArgse){labelFont=(Font)bindingSourceCurrent}*BindingSource组件(续)【例】自学*BindingNavigator组件BindingNavigator组件同时提供了两种功能:一种是提供了对窗体中的数据进行导航控制和常用数据操作的方法另一种是提供了一个ToolStrip控件形式的导航界面。BindingNavigator组件常用的属性有:)BindingSource属性:指定组件所要绑定的BindingSource对象。)Dock属性:确定BindingNavigator组件提供的ToolStrip在窗体设计器中的位置。*BindingNavigator组件(续)【例】设计一个窗体自动将yDatabasemdf中包含的所有表的名称显示出来供用户选择同时在界面中提供记录导航条和添加、删除、修改、保存、放弃五个按钮并完成对所选表的相应处理功能。*BindingNavigator组件(续)privatevoidFormBindingNavigatorLoad(objectsender,EventArgse){bindingNavigatorBindingSource=bindingSource*BindingNavigator组件(续)将MyDatabasemdf中的表名称添加到dataTableListBox中for(inti=imyDatabaseDataSetTablesCounti){listBoxMyTablesItemsAdd(myDatabaseDataSetTablesiTableName)}listBoxMyTablesSelectedIndex=不允许用户直接在最下面的行添加新行dataGridViewAllowUserToAddRows=false*BindingNavigator组件(续)不允许用户直接按Delete键删除行dataGridViewAllowUserToDeleteRows=false}privatevoidlistBoxMyTablesSelectedIndexChanged(objectsender,EventArgse){intindex=listBoxMyTablesSelectedIndexselectedTable=myDatabaseDataSetTablesindexstringqueryString=select*fromselectedTableTableNameadapter=newSqlDataAdapter(*BindingNavigator组件(续)queryString,PropertiesSettingsDefaultMyDatabaseConnectionString)SqlCommandBuilderbuiler=newSqlCommandBuilder(adapter)adapterInsertCommand=builerGetInsertCommand()adapterDeleteCommand=builerGetDeleteCommand()adapterUpdateCommand=builerGetUpdateCommand()adapterFill(selectedTable)bindingSourceDataSource=selectedTabledataGridViewDataSource=bindingSource}*BindingNavigator组件(续)privatevoidbuttonAddnewClick(objectsender,EventArgse){try{bindingSourceAddNew()}catch(Exceptionerr){MessageBoxShow(errMessage)}}*BindingNavigator组件(续)privatevoidbuttonDeleteClick(objectsender,EventArgse){if(dataGridViewSelectedRowsCount==){MessageBoxShow(请先单击最左边的空白列选择要删除的行可以按住Ctrl同时选中多行)}else{if(MessageBoxShow(*BindingNavigator组件(续)确实要删除选定的行吗?,小心,MessageBoxButtonsYesNo,MessageBoxIconWarning)==DialogResultYes){for(inti=dataGridViewSelectedRowsCounti=i){bindingSourceRemoveAt(dataGridViewSelectedRowsiIndex)}}}}*BindingNavigator组件(续)privatevoidbuttonSaveClick(objectsender,EventArgse){try{thisValidate()bindingSourceEndEdit()adapterUpdate(myDatabaseDataSetTableslistBoxMyTablesSelectedIndex)MessageBoxShow(保存成功)}catch(Exceptionerr){*BindingNavigator组件(续)MessageBoxShow(errMessage,保存失败)}}privatevoiddataGridViewDataError(objectsender,DataGridViewDataErrorEventArgse){MessageBoxShow(eExceptionMessage)}*DataGridView控件DataGridView控件提供了强大而灵活的显示与编辑二维表数据的方法大大简化了复杂的数据操作。将DataGridView从工具箱拖放到设计窗体上后如果不修改其他属性则该控件默认具有如下功能:如果绑定了数据源则会自动为数据源中的每个字段单独创建一列。自动使用字段名称作为列标题。列标题是固定的即在列表中向下移动滚动条时列标题不会滚动出视图。*DataGridView控件(续)支持自动排序。在列标题中单击或双击该字段中的值就会按升序或降序排序。字母顺序区分大小写。单击DataGridView左上角的方块可以选择整个表。支持自动调整大小功能。在标题之间的列分隔符上双击该分隔符左边的列就会自动按照单元格的内容展开或收缩。*DataGridView控件(续)【例】演示DataGridView常用功能。*DataGridView控件(续)privatevoidbuttonBindingDataSourceClick(objectsender,EventArgse){if(dataGridViewDataSource!=){bindingNavigatorBindingSource=dataGridViewDataSource=*DataGridView控件(续)}else{先绑定后填充与先填充后绑定效果相同myTableTableAdapterFill(myDatabaseDataSetMyTable)myTableTableAdapterFill(myDatabaseDataSetMyTable)绑定到数据源全部字段bindingSourceDataSource=myDatabaseDataSetMyTablebindingNavigatorBindingSource=bindingSource*DataGridView控件(续)dataGridViewDataSource=bindingSource}}privatevoidbuttonShowExpectedFieldClick(objectsender,EventArgse){dataGridViewColumns照片Visible=!dataGridViewColumns照片Visible}*DataGridView控件(续)privatevoidbuttonExchangeColumnClick(objectsender,EventArgse){intcolumnIndex=dataGridViewColumns学号DisplayIndexdataGridViewColumns学号DisplayIndex=dataGridViewColumns姓名DisplayIndexdataGridViewColumns姓名DisplayIndex=columnIndex}*DataGridView控件(续)privatevoidbuttonAutoAdjustWidthClick(objectsender,EventArgse){根据字段和标题的最大长度调整单元格宽度dataGridViewAutoResizeColumns(DataGridViewAutoSizeColumnsModeAllCells)}*DataGridView控件(续)privatevoidbuttonSetAlternatingStyleClick(objectsender,EventArgse){if(dataGridViewAlternatingRowsDefaultCellStyleBackColor!=ColorMistyRose){dataGridViewAlternatingRowsDefaultCellStyleBackColor=ColorMistyRose}else{*DataGridView控件(续)dataGridViewAlternatingRowsDefaultCellStyleBackColor=dataGridViewRowsDefaultCellStyleBackColor}}*DataGridView控件(续)privatevoidbuttonFixFieldPositionClick(objectsender,EventArgse){if(dataGridViewColumns学号Frozen==false){dataGridViewColumns学号Frozen=truedataGridViewColumns姓名Frozen=truedataGridViewDock=DockStyleNonedataGridViewWidth=}*DataGridView控件(续)else{dataGridViewColumns学号Frozen=falsedataGridViewColumns姓名Frozen=falsedataGridViewDock=DockStyleTop}}*DataGridView控件(续)privatevoidbuttonChangeCurrentCellClick(objectsender,EventArgse){Randomr=newRandom()introw=rNext(dataGridViewRowsCount)intcol=rNext(dataGridViewColumnsCount)dataGridViewCurrentCell=dataGridViewRowsrowCellscol}*DataGridView控件(续)privatevoidbuttonModifyHeaderTextClick(objectsender,EventArgse){DataGridViewColumncolumn=dataGridViewColumns学号if(columnHeaderText!=columnDataPropertyName){让标题与绑定的字段名称相同columnHeaderText=columnDataPropertyName}else{*DataGridView控件(续)columnHeaderText=StudentID}}privatevoidbuttonShowSelectedRowsClick(objectsender,EventArgse){*DataGridView控件(续)stringselectedXueHao=for(inti=dataGridViewSelectedRowsCounti=i){selectedXueHao=stringFormat(第{}行:学号为{}n,dataGridViewSelectedRowsiIndex,dataGridViewSelectedRowsiCells学号Value)}MessageBoxShow(selectedXueHao,选中的行信息)}*DataGridView控件(续)privatevoidbuttonDeleteCurrentColumnClick(objectsender,EventArgse){DataGridViewCellcurrentCell=dataGridViewCurrentCellDialogResultresult=MessageBoxShow(stringFormat(确实删除{}一列吗?,*DataGridView控件(续)dataGridViewColumnscurrentCellColumnIndexHeaderText),小心,MessageBoxButtonsYesNo,MessageBoxIconQuestion)if(result==DialogResultYes){dataGridViewColumnsRemove(dataGridViewColumnscurrentCellColumnIndex)}}*DataGridView控件(续)privatevoidbuttonShowSelectedCe

类似资料

该用户的其他资料

2015.11创新杯创新杯说课大赛国赛说课课件.ppt

19--课程..创新杯说课大赛国赛说课课件.ppt

2014创新杯直线的倾斜角与斜率课程创新杯说课大赛国赛说课课件.ppt

13幼师3 住创新杯说课大赛国赛说课课件.ppt

2010血栓的形成讲课曹颜冬创新杯说课大赛国赛说课课件.ppt

职业精品

精彩专题

让你惊艳又清新的英文短诗合集

让你清新惊艳的英文小诗有哪些呢?小编汇集了以下经典英文诗、唯美爱情小诗、英文诗押韵技巧等等,让爱好英文短诗的你能够一起体验其中的乐趣!

用户评论

0/200
上传我的资料

热门资料排行换一换

  • 本科毕业论文指导教师的评语

  • 医疗卫生工作人员职业道德守则

  • 大学生会计岗位实习总结

  • 中外陪审制度浅谈——兼论我国陪审制…

  • 大数据相关题库142

  • 常用的几种启动子分析方法研究成果

  • 2016国庆节手抄报版面设计图大全…

  • 2014版国家电网公司安全工作规定

  • 民航英语一百句1

  • 资料评价:

    / 131
    所需积分:0 立即下载

    VIP

    在线
    客服

    免费
    邮箱

    吉林快3—吉林快三服务号

    扫描关注领取更多福利