将OleDbDataAdapter绑定到Winform下的DataGrid

将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
{
///

1<summary>   
2/// CustomDataGrid 的摘要说明。   
3/// </summary>

public class CustomDataGrid : System.Windows.Forms.DataGrid
{
///

1<summary>   
2/// 必需的设计器变量。   
3/// </summary>

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;
///

1<summary>   
2/// 实例化一个新的CustomDataGrid控件,用于OleDB   
3/// </summary>

public CustomDataGrid()
{
// 该调用是 Windows.Forms 窗体设计器所必需的。
InitializeComponent();

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

///

1<summary>   
2/// 实例化一个新的CustomDataGrid控件,用于OleDB   
3/// </summary>

///

1<param name="BindOleDbAdp"/>

传入的OleDbDataAdapter
public CustomDataGrid(System.Data.OleDb.OleDbDataAdapter BindOleDbAdp)
{
// 该调用是 Windows.Forms 窗体设计器所必需的。
InitializeComponent();

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

///

1<summary>   
2/// 清理所有正在使用的资源。   
3/// </summary>

protected override void Dispose( bool disposing )
{
if( disposing )
{
if( components != null )
components.Dispose();
}
base.Dispose( disposing );
}

#region Component Designer generated code
///

1<summary>   
2/// 设计器支持所需的方法 - 不要使用代码编辑器   
3/// 修改此方法的内容。   
4/// </summary>

private void InitializeComponent()
{
components = new System.ComponentModel.Container();
this.ContentDataSet=new System.Data.DataSet();
tittleName=null;
}
#endregion

#region 给CustomDataGrid控件赋值新的OleDbDataAdapter
///

1<summary>   
2/// 给CustomDataGrid控件赋值新的OleDbDataAdapter   
3/// </summary>

public System.Data.OleDb.OleDbDataAdapter DataGridOleDbDataAdapter
{
get
{
return this.BindOleDbDataAdapter ;
}
set
{
BindOleDbDataAdapter=value;

//是否填充数据集并显示
if (FillAfterBindADP)
{
DataBind();
}
}

}
#endregion

#region FillDataSetAndBindAfterBindOleDBDataAdapter CustomDataGrid的BindOleDbDataAdapter传入新值后是否显示新的数据
///

1<summary>   
2/// CustomDataGrid的BindOleDbDataAdapter传入新值后是否显示新的数据   
3/// </summary>

public bool FillDataSetAndBindAfterBindOleDBDataAdapter
{
get
{
return FillAfterBindADP;
}
set
{
FillAfterBindADP=value;
}
}
#endregion

#region DataBind CustomDataGrid对OleDBDataAdapter的绑定
///

1<summary>   
2/// CustomDataGrid对OleDBDataAdapter的绑定   
3/// </summary>

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 提交所有更改
///

1<summary>   
2/// 提交所有更改   
3/// </summary>

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 放弃所有更改
///

1<summary>   
2/// 放弃所有更改   
3/// </summary>

public void CancelUpdate()
{
DataBind();
}
#endregion

#region Delete 删除所有选择项
///

1<summary>   
2/// 删除所有选择项(删除不影响原始数据,必需更新数据库后才发生)   
3/// </summary>

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 是否允许多选(同删除有关,同界面有关)
///

1<summary>   
2/// 是否允许多选(同删除有关,同界面有关)   
3/// </summary>

public bool EnableSelect
{
get
{
return EnableMultiSelect;
}
set
{
EnableMultiSelect=value;
}
}
#endregion

#region constructDataGridDisplayStyles 根据DataSet数据类型创建数据显示方式
///

1<summary>   
2/// 根据DataSet数据类型创建数据显示方式   
3/// </summary>

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

 1<j;i++) (tittlename!="null)" (tittlename.length="" for(int="" i="0;i&lt;tempDGTS.GridColumnStyles.Count;i++)" if="" tempdgts.gridcolumnstyles.add(tempdgcs[i]);="" {="" }="">=i)   
 2{   
 3tempDGTS.GridColumnStyles[i].HeaderText=tittleName[i] ;   
 4}   
 5}   
 6  
 7} 
 8
 9this.TableStyles.Clear();   
10tempDGTS.MappingName=this.ContentDataSet.Tables[0].TableName ;   
11this.TableStyles.Add(tempDGTS);   
12tempDGTS.Dispose();   
13  
14  
15}   
16}   
17#endregion 
18
19/// <summary>   
20/// 增加新列,用于选择   
21/// </summary>   
22private void AddSelectRow()   
23{   
24DataColumn dc=new DataColumn("Select",System.Type.GetType("System.Boolean"));   
25dc.DefaultValue=false;   
26this.ContentDataSet.Tables[0].Columns.Add(dc);   
27  
28} 
29
30/// <summary>   
31/// 属性 对应表的标题   
32/// </summary>   
33public string[] TableTittle   
34{   
35get   
36{   
37return tittleName;   
38}   
39set   
40{   
41tittleName=value;   
42}   
43}   
44}   
45}   
46
47
48欢迎指教,谢谢大家!</j;i++)>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus