將OleDbDataAdapter繫結到Winform下的DataGrid (轉)
將OleDataAdapter繫結到下的DataGrid,這個說法是不是有點奇怪:不妨看看,偶用了一個晚上寫出來的,寫的不好大家見諒。
當然,有了這樣的一種繫結方法,那麼同樣我們還可以繼承出繫結DataAdapter的DataGrid .大家不妨試一試,偶寫的不好,就當拋磚引玉。
相關的屬性方法和事件:
CustomDataGrid 例項化一個新的CustomDataGrid,用於OleDB
CustomDataGrid 例項化一個新的CustomDataGrid控制元件,用於OleDB
DataGridOleDbDataAdapter 給CustomDataGrid控制元件賦值新的OleDbDataAdapter
FillDataSetAndBindAfterBindOleDBDataAdapter CustomDataGrid的BindOleDbDataAdapter傳入新值後是否顯示新的資料
DataBind CustomDataGrid對OleDBDataAdapter的繫結
Update 提交所有更改
CancelUpdate 放棄所有更改
DeleteRows 刪除所有選擇項(刪除不影響原始資料,必需後才發生)
Enable 是否允許多選(同刪除有關,同介面有關)
constructDataGridDisplayStyles 根據DataSet資料型別建立資料顯示方式
AddSelectRow 增加新列,用於選擇
TableTittle 屬性 對應表的標題
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System..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
///
/// 傳入的OleDbDataAdapter
public CustomDataGrid(System.Data.OleDb.OleDbDataAdapter BindOleDbAdp)
{
// 該呼叫是 Windows.Forms 窗體設計器所必需的。
InitializeComponent();
// TODO: 在 InitializeComponent 呼叫後新增任何初始化
BindOleDbAdp=this.DataGridOleDbDataAdapter ;
}
///
/// 清理所有正在使用的資源。
///
protected overr 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.Data=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].Mappiame=dc.ColumnName ;
break;
default:
tempDGCS[currCount]=new System.Windows.Forms.DataGridTextBoxColumn();
tempDGCS[currCount].MapName=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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Henry手記:WinForm Datagrid結構剖析(二)程式 (轉)ORM
- Winform下的Datagrid的列風格(4)—DataGridComboBoxTableViewColumnORMView
- Winform控制元件繫結資料ORM控制元件
- MySQL將提供與Linux繫結的資料庫下載(轉)MySqlLinux資料庫
- DataGrid與SQL Server 2000資料繫結SQLServer
- Windows下繫結執行緒到指定的CPU核心Windows執行緒
- 如何在 .Net 7 中將 Query 繫結到陣列陣列
- 從 XML 到 Java 程式碼的資料繫結(1)(轉)XMLJava
- dataGridView繫結Dictionary |Dictionary繫結到DataGridViewView
- 教你如何在.Net 7中將Query繫結到陣列陣列
- 在winform中如何實現雙向資料繫結?ORM
- EasyUI 中 DataGrid 控制元件 列 如何繫結物件中的屬性UI控制元件物件
- Windows 應用程式 DataGrid資料繫結顯示中文列名Windows
- Winform 用string型別的屬性來繫結CheckBox薦ORM型別
- 動態繫結的心得 (轉)
- 手動繫結SQLDataSource到GridView後分頁的問題(轉)SQLLDAView
- wpf 視窗程式下將datagrid匯出為excelExcel
- Silverlight DataGrid 資料繫結滑鼠移入到內容項時顯示類似ToolTip提示文字
- linux下把程式繫結到特定cpu核上執行Linux
- Winform下的畫板ORM
- 【阿不】深入ASP.NET資料繫結(下)—多樣的繫結方式ASP.NET
- asp.net系統的使用者將自己的帳號繫結到特定的ip上面ASP.NET
- liunx下雙網路卡繫結
- 如何將JBuilder下的程式轉到eclipse下進行繼續開發?UIEclipse
- 【轉】redhat 雙網路卡繫結Redhat
- [轉帖]Redis如何繫結CPURedis
- 【ASP.NET Core】繫結到 CancellationToken 物件ASP.NET物件
- WPF/C#:資料繫結到方法C#
- 利用.htaccess繫結子域名到子目錄
- EnableViewState="false"的DataGrid分頁 (轉)ViewFalse
- Apiware:一個輕鬆將net/http及fasthttp請求引數繫結到結構體的中介軟體APIHTTPAST結構體
- 將表名作為繫結變數的非法操作變數
- [工作札記]02: .Net Winform控制元件TreeView最簡遞迴繫結方法ORM控制元件View遞迴
- 使用反射對繫結url引數到結構體反射結構體
- linux下udev重新繫結磁碟Linuxdev
- Gin 框架怎麼驗證繫結到結構體的欄位?框架結構體
- 從 XML 到 Java 程式碼的資料繫結(3):從文字到位元組碼(轉)XMLJava
- 從 XML 到 Java 程式碼的資料繫結(2):從 XML 資料建立類(轉)XMLJava