将OleDbDataAdapter绑定到Winform下的DataGrid (转)

将OleDbDataAdapter绑定到Winform下的DataGrid (转)[@more@]

  将OledbDataAdapter绑定到WinForm下的DataGrid,这个说法是不是有点奇怪:不妨看看,偶用了一个晚上写出来的,写的不好大家见谅。

  当然,有了这样的一种绑定方法,那么同样我们还可以继承出绑定sqlDataAdapter的DataGrid .大家不妨试一试,偶写的不好,就当抛砖引玉。

相关的属性方法和事件:

  CustomDataGrid 实例化一个新的CustomDataGrid控件,用于OleDB
 
  CustomDataGrid 实例化一个新的CustomDataGrid控件,用于OleDB
 
  DataGridOleDbDataAdapter 给CustomDataGrid控件赋值新的OleDbDataAdapter
 
  FillDataSetAndBindAfterBindOleDBDataAdapter CustomDataGrid的BindOleDbDataAdapter传入新值后是否显示新的数据
 
  DataBind CustomDataGrid对OleDBDataAdapter的绑定
 
  Update 提交所有更改
 
  CancelUpdate 放弃所有更改
 
  DeleteRows 删除所有选择项(删除不影响原始数据,必需更新数据库后才发生)
 
  Enableselect 是否允许多选(同删除有关,同界面有关)
 
  constructDataGridDisplayStyles 根据DataSet数据类型创建数据显示方式
 
  AddSelectRow 增加新列,用于选择
 
  TableTittle 属性 对应表的标题 

 

 

 

 

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.windows.Forms;

namespace Forward.WinUI
{
 ///
 /// CustomDataGrid 的摘要说明。
 ///
 public class CustomDataGrid : System.Windows.Forms.DataGrid
 {
 ///
 /// 必需的设计器变量。
 ///
 private System.ComponentModel.Container components = null;

 //这是本模块绑定的OleDbDataAdapter
 private System.Data.OleDb.OleDbDataAdapter BindOleDbDataAdapter;

 
 // 这是本DataGrid内含的DataSet对象
 private System.Data.DataSet ContentDataSet;

 //CustomDataGrid的BindOleDbDataAdapter传入新值后是否显示新的数据
 private bool FillAfterBindADP;

 //允许进行多行选择
 private bool EnableMultiSelect;

 //每列标题名
 private string[] tittleName;
 ///
 /// 实例化一个新的CustomDataGrid控件,用于OleDB
 ///
 public CustomDataGrid()
 {
 // 该调用是 Windows.Forms 窗体设计器所必需的。
 InitializeComponent();

 // TODO: 在 InitializeComponent 调用后添加任何初始化
 }

 ///
 /// 实例化一个新的CustomDataGrid控件,用于OleDB
 ///
 /// dbadp">传入的OleDbDataAdapter
 public CustomDataGrid(System.Data.OleDb.OleDbDataAdapter BindOleDbAdp)
 {
 // 该调用是 Windows.Forms 窗体设计器所必需的。
 InitializeComponent();

 // TODO: 在 InitializeComponent 调用后添加任何初始化
 BindOleDbAdp=this.DataGridOleDbDataAdapter ;
 }


 ///
 /// 清理所有正在使用的资源。
 ///
 protected override void Dispose( bool disposing )
 {
 if( disposing )
 {
 if( components != null )
 components.Dispose();
 }
 base.Dispose( disposing );
 }

 #region Component Designer generated code
 ///
 /// 设计器支持所需的方法 - 不要使用代码编辑器
 /// 修改此方法的内容。
 ///
 private void InitializeComponent()
 {
 components = new System.ComponentModel.Container();
 this.ContentDataSet=new System.Data.DataSet();
 tittleName=null;
 }
 #endregion

 #region 给CustomDataGrid控件赋值新的OleDbDataAdapter
 ///
 /// 给CustomDataGrid控件赋值新的OleDbDataAdapter
 ///
 public System.Data.OleDb.OleDbDataAdapter DataGridOleDbDataAdapter
 {
 get
 {
 return this.BindOleDbDataAdapter ;
 }
 set
 {
 BindOleDbDataAdapter=value;
 
 //是否填充数据集并显示
 if (FillAfterBindADP)
 {
 DataBind(); 
 }
 }

 }
 #endregion

 #region FillDataSetAndBindAfterBindOleDBDataAdapter  CustomDataGrid的BindOleDbDataAdapter传入新值后是否显示新的数据
 ///
 /// CustomDataGrid的BindOleDbDataAdapter传入新值后是否显示新的数据
 ///
 public bool FillDataSetAndBindAfterBindOleDBDataAdapter
 {
 get
 {
 return FillAfterBindADP;
 }
 set
 {
 FillAfterBindADP=value;
 }
 }
 #endregion

 #region DataBind CustomDataGrid对OleDBDataAdapter的绑定
 ///
 /// CustomDataGrid对OleDBDataAdapter的绑定
 ///
 public void DataBind()
 {
 if (this.BindOleDbDataAdapter!=null)
 {
 this.ContentDataSet.Tables.Clear();
 BindOleDbDataAdapter.Fill(this.ContentDataSet );
 this.Datasource=null;
 constructDataGridDisplayStyles();
 this.DataSource=this.ContentDataSet.Tables[0]; 
 }
 
 }
 #endregion

 #region Update 提交所有更改
 ///
 /// 提交所有更改
 ///
 public  new void Update()
 {
 if (BindOleDbDataAdapter!=null)
 {
 if (this.ContentDataSet.Tables[0]!=null)
 {
 try
 {

 BindOleDbDataAdapter.Update(((System.Data.DataTable)this.DataSource));
 }
 catch (System.Exception ex)
 {
 MessageBox.Show(this,ex.Message.ToString());

 }
 finally
 {

 }
 }
 }
 }
 #endregion

 #region CancelUpdate 放弃所有更改
 ///
 /// 放弃所有更改
 ///
 public void CancelUpdate()
 {
 DataBind();
 }
 #endregion

 #region Delete 删除所有选择项
 ///
 /// 删除所有选择项(删除不影响原始数据,必需更新数据库后才发生)
 ///
 public void DeleteRows()
 {
 if(EnableMultiSelect)
 {
 if (this.BindOleDbDataAdapter!=null)
 {

 int i=0;
 bool[] row;
 row=new bool[((System.Data.DataTable)this.DataSource).Rows.Count];
 foreach(DataRow dr in ((System.Data.DataTable)this.DataSource).Rows)
 {
 if (Convert.ToBoolean(dr["Select"]))
 {
 row[i]=true;
 }
 else
 {
 row[i]=false;
 }
 i++;
 }

 for(i=((System.Data.DataTable)this.DataSource).Rows.Count-1;i>=0;i--)
 {
 if (Convert.ToBoolean(row[i]))
 { 
 ((System.Data.DataTable)this.DataSource).Rows[i].Delete();
 //  ((System.Data.DataTable)this.DataSource).Rows.RemoveAt(i);
 }
 
 }
   
 }

 }

 }
 #endregion

 #region EnableSelect 是否允许多选(同删除有关,同界面有关)
 ///
 /// 是否允许多选(同删除有关,同界面有关)
 ///
 public bool EnableSelect
 {
 get
 {
 return EnableMultiSelect;
 }
 set
 {
 EnableMultiSelect=value;
 }
 }
 #endregion

 #region constructDataGridDisplayStyles 根据DataSet数据类型创建数据显示方式
 ///
 /// 根据DataSet数据类型创建数据显示方式
 ///
 private void constructDataGridDisplayStyles()
 {
 if (this.ContentDataSet.Tables[0]!=null)
 {
 System.Windows.Forms.DataGridColumnStyle[] tempDGCS;

 int count;
 int currCount=0;

 if(EnableMultiSelect)
 {
 count=this.ContentDataSet.Tables[0].Columns.Count +1;
 }
 else
 {
 count=this.ContentDataSet.Tables[0].Columns.Count;
 }

 if(EnableMultiSelect)
 {
 AddSelectRow();
 }

 tempDGCS=new System.Windows.Forms.DataGridColumnStyle[count];

 if(EnableMultiSelect)
 {
 tempDGCS[0]=new System.Windows.Forms.DataGridBoolColumn();
 tempDGCS[0].HeaderText="Select";
 tempDGCS[0].Width=80;
 }
 foreach(DataColumn dc in this.ContentDataSet.Tables[0].Columns)
 {
 switch(dc.DataType.ToString())
 {
 case "System.Boolean":
 tempDGCS[currCount]=new System.Windows.Forms.DataGridBoolColumn();
 tempDGCS[currCount].MappiNGName=dc.ColumnName ;
 break;
 default:
 tempDGCS[currCount]=new System.Windows.Forms.DataGridTextBoxColumn();
 tempDGCS[currCount].MappingName=dc.ColumnName ;
 break;
 }
 currCount++;

 }

 System.Windows.Forms.DataGridTableStyle tempDGTS=new DataGridTableStyle();

 //这是用于加入用于做选择的新列
 if(this.EnableMultiSelect)
 {
 tempDGTS.GridColumnStyles.Add(tempDGCS[count-1]);
 }
 int j;
 j=0;
 if(this.EnableMultiSelect)
 {
 j=count-1;
 }
 else
 {
 j=count;
 }

 for(int i=0 ;i {
 tempDGTS.GridColumnStyles.Add(tempDGCS[i]);
 }
 for(int i=0;i {
 if (tittleName!=null)
 {
 if (tittleName.Length>=i)
 {
 tempDGTS.GridColumnStyles[i].HeaderText=tittleName[i] ;
 }
 }
 
 }

 this.TableStyles.Clear();
 tempDGTS.MappingName=this.ContentDataSet.Tables[0].TableName ;
 this.TableStyles.Add(tempDGTS);
 tempDGTS.Dispose();
 
 
 }
 }
 #endregion

 ///
 /// 增加新列,用于选择
 ///
 private void AddSelectRow()
 {
 DataColumn dc=new DataColumn("Select",System.Type.GetType("System.Boolean"));
 dc.DefaultValue=false;
 this.ContentDataSet.Tables[0].Columns.Add(dc);
 
 }

 ///
 /// 属性 对应表的标题
 ///
 public string[] TableTittle
 {
 get
 {
 return tittleName;
 }
 set
 {
 tittleName=value;
 }
 }
 }
}

欢迎指教,谢谢大家!


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10794571/viewspace-974798/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10794571/viewspace-974798/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值