zoukankan      html  css  js  c++  java
  • 贴个东东试试.以前偶自己贴到CSDN上过.

    将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
    {
     /// <summary>
     /// CustomDataGrid 的摘要说明。
     /// </summary>
     public class CustomDataGrid : System.Windows.Forms.DataGrid
     {
      /// <summary>
      /// 必需的设计器变量。
      /// </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;
      /// <summary>
      /// 实例化一个新的CustomDataGrid控件,用于OleDB
      /// </summary>
      public CustomDataGrid()
      {
       // 该调用是 Windows.Forms 窗体设计器所必需的。
       InitializeComponent();

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

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

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


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

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

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

      }
      #endregion

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

      #region DataBind CustomDataGrid对OleDBDataAdapter的绑定
      /// <summary>
      /// CustomDataGrid对OleDBDataAdapter的绑定
      /// </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 提交所有更改
      /// <summary>
      /// 提交所有更改
      /// </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 放弃所有更改
      /// <summary>
      /// 放弃所有更改
      /// </summary>
      public void CancelUpdate()
      {
       DataBind();
      }
      #endregion

      #region Delete 删除所有选择项
      /// <summary>
      /// 删除所有选择项(删除不影响原始数据,必需更新数据库后才发生)
      /// </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 是否允许多选(同删除有关,同界面有关)
      /// <summary>
      /// 是否允许多选(同删除有关,同界面有关)
      /// </summary>
      public bool EnableSelect
      {
       get
       {
        return EnableMultiSelect;
       }
       set
       {
        EnableMultiSelect=value;
       }
      }
      #endregion

      #region constructDataGridDisplayStyles 根据DataSet数据类型创建数据显示方式
      /// <summary>
      /// 根据DataSet数据类型创建数据显示方式
      /// </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<j;i++)
        {
         tempDGTS.GridColumnStyles.Add(tempDGCS[i]);
        }
        for(int i=0;i<tempDGTS.GridColumnStyles.Count;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

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

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

    欢迎指教,谢谢大家!  5555555  还有很多要改进的东西

  • 相关阅读:
    DataAnnotations
    使用BizTalk实现RosettaNet B2B So Easy
    biztalk rosettanet 自定义 pip code
    Debatching(Splitting) XML Message in Orchestration using DefaultPipeline
    Modifying namespace in XML document programmatically
    IIS各个版本中你需要知道的那些事儿
    关于IHttpModule的相关知识总结
    开发设计的一些思想总结
    《ASP.NET SignalR系列》第五课 在MVC中使用SignalR
    《ASP.NET SignalR系列》第四课 SignalR自托管(不用IIS)
  • 原文地址:https://www.cnblogs.com/sasbya/p/4483.html
Copyright © 2011-2022 走看看