返回首页


可以处理一般的用户定制控制组合(smartCombo)连接{S0}简介
欢迎我的第一个代码项目中的文章!
这是一个非常简单的C#Windows应用程序,如何解释创建一个combox数据绑定的自定义控件。
我是一个Windows应用程序,我需要显示一个组合框将负载与ValueMember和的DisplayMember数据。我需要做的这与出物理插入查询比指定的属性值。值将会为每个用户定制。现在将是一个重大的连接点。在这里,我可能需要使用通用IDBConnection的SqlConnection,OleDbConnection的,它使用了一些修改OdbcConnection等可用于任何类型的数据源。这篇文章是要显示那些在一个组合或数据要做出自己的控制。它会给一个清晰的思路这一点。背景
我已经创建了一个非常简单的Windows窗体,它有两个组合框。一LoadData按钮时,会被点击,将被载入。另一个将被载入表单时将被载入。在这里,我已经使用了类SmartCombo继承组合类。在那里,我已经使用,可用于在属性和方法设计时间以及运行时间。在这里,我已经使用了一个组合(右侧组合)负载在设计时支持数据。和左侧的组合,我已经使用纯粹运行时的负荷。运行时间时,用户将LoadData"按钮,然后按下面的代码将被执行。

       

smartCombo1.SetConnection = cn; 

smartCombo1.ValueID = "AccountNo";

smartCombo1.ValueText = "AccountName";

smartCombo1.TableName = "tblAccountInfo";

smartCombo1.WhereCondition = "AccountNo = 

'0000000112'";

//here we can use like 

//smartCombo1.WhereCondition = 

//"AccountName Like '%HO%'";

smartCombo1.SetDataSource(ProviderType.SqlServer);


其他方式,我们可以设计时SmartCombo属性设置:


,属性设置后,您必须添加下面的代码得到某些数据
{C}这里的TableName =我想从那里加载数据表的名称
ValueID =像ID的隐藏价值,将作为治疗的一个字段名
ValueText =字段的名称将作为一个的DisplayMember治疗守则下面给出的编码的主要组成部分。我使用了枚举将被用来选择适当的提供者,如SQL,OLEDB,ODBC,甲骨文等。甲骨文是不是在这里实现。和一些属性证明定制表和现场。
using System;

using System.Collections.Generic;

using System.Text;

using System.Windows.Forms;

using System.Data;



namespace CustomComboDataBinding

{

 class SmartCombo:ComboBox

 {

   #region Private Variable collection

   private IDbConnection _iConnection;

   private string _TableName;

   private string _valueID;

   private string _valueText;

   private string _whereCond="";

   #endregion



   #region Property Collection

   /// 

   /// Set generic Connection

   /// SQLConnection,OLEDBConnection,

   ///ODBCCOnnection accepted

   /// 

   public IDbConnection SetConnection

   {

    get { return _iConnection; }

    set { _iConnection = value; }

   }

   /// 

   /// Set or get the table name

   /// 

   public string TableName

   {

    set { _TableName = value; }

    get { return _TableName; }

   }



   /// 

   /// get or set

   /// The Item that will be not displayed 

   /// but treated as ID

   /// 

   public string ValueID

   {

    set { _valueID = value; }

    get { return _valueID; }

   }



   /// 

   /// get or set a item that will be 

   /// displayed on smart combo

   /// 

   public string ValueText

   {

    get { return _valueText; }

    set { _valueText = value; }

   }



   /// 

   /// get the item that is hidden 

   ///or treated as a ID or

   /// set from ValueID

   /// 

   public string Value

   {

    get { return base.SelectedValue.ToString(); }

   }



   /// 

   /// Get the display Item of the smart combo

   /// 

   public string Text

   {

    get { return base.Text; }

   }



   public string WhereCondition

   {

    get { return _whereCond; }

    set { _whereCond = value; }

   }



   #endregion

   /// 

   /// SetDatasource execute the final

   /// lines of code. It will load the

   /// data as per given attribute.

   /// 

   public void SetDataSource(ProviderType pType)

   {

    IDbDataAdapter iadpt;

    IDbCommand iCmd;

    string strSQL;

    DataSet ds;        

    try

    {

     if (WhereCondition == "")

     {

      strSQL = "Select [" + ValueID + "], 

      [" + ValueText + 

      "] FROM [" + TableName + "] ";

     }

     else

     {

      strSQL = "Select [" + ValueID + "], 

     [" + ValueText +    "] FROM [" + 



      TableName + "] WHERE " + WhereCondition;

     }

     iCmd = GetCommand(pType);

     iCmd.Connection = SetConnection;

     iCmd.CommandText = strSQL;

     iadpt = GetAdapter(pType);

     iadpt.SelectCommand = iCmd;

     ds = new DataSet();

     iadpt.Fill(ds);

     DataTable dt = MakeTable();

     dt = ds.Tables[0];

     base.DisplayMember = ValueText;

     base.ValueMember = ValueID;

     base.DataSource = dt.DefaultView;

    }

    catch (Exception ex)

    {

     throw ex;

    }

   }





   #region Private Function



   private DataTable MakeTable()

   {

    DataTable dt;

    dt = new DataTable("Source");

    dt.Columns.Add(ValueID);

    dt.Columns.Add(ValueText);

    return dt;

   }



   private IDbDataAdapter GetAdapter(ProviderType pType)

   {

    if (pType == ProviderType.SqlServer)

    {

     return new System.Data.SqlClient.SqlDataAdapter();

    }

    else if(pType == ProviderType.Oledb)

    {

     return new System.Data.OleDb.OleDbDataAdapter();

    }

    else if(pType == ProviderType.Odbc)

    {

     return new System.Data.Odbc.OdbcDataAdapter();

    }

    return null;

   }



   private IDbCommand GetCommand(ProviderType pType)

   {

    if (pType == ProviderType.SqlServer)

    {

     return new System.Data.SqlClient.SqlCommand();

    }

    else if (pType == ProviderType.Oledb)

    {

     return new System.Data.OleDb.OleDbCommand();

    }

    else if (pType == ProviderType.Odbc)

    {

     return new System.Data.Odbc.OdbcCommand();

    }

    return null;

   }

   #endregion

  }



  /// 

  /// ProviderType enum.

  /// 

  public enum ProviderType

  {

   SqlServer,

   Oledb,

   Odbc

  }

}

是什么代码吗?答:此代码演示如何让用户控制工作的一些定制的方式。在这里,我有实施一个组合框和它的每个开发人员具有约束力自定义的数据正在使用。我把它叫做smartCombo控制。我如何用我现有的代码集成,我怎么 使用它呢?答:在编译项目只需拖动拖放从工具箱smartCombo控制和使用是必要的。 结论:这是我的第一篇文章的代码,项目。所以,请给我正确的建议 详细说明:{A}MD Arifuzzamannbsp;(微软认证技术专家)协助数据库报告Developernbsp;Metatude亚洲Ltdnbsp;达卡,Bangladeshnbsp;电子邮件:arif_uap@yahoo.com& #160;

回答

评论会员:AxelM 时间:2011/12/16
-
评论会员:PIEBALDconsult 时间:2011/12/16
以下是一般不赞成:


catch (Exception ex)

{

  throw ex;

}


是在表示层的数据访问代码。

另外,我看到小点,在使用DataSet,正好填补了一个DataTable,你可以只需填写一个DataTable直接。但是,更重要的一个风格问题。
评论会员:吕克Pattyn 时间:2011/12/16
。恭喜你进入您的第一篇文章

我的主要建议你发布的代码片段使用文本,没有图像;
在看LT; PREgt;标签,它有一个语言选项,将语法着色
您自动的代码,并导致在一个比你目前的图像更具可读性。

您仍然可以改变,在现有的文章,必须有一个"编辑","更新"
或"修改"按钮用于这一目的的某处。或者你也可以邮件的更改
编辑的工作人员。



吕克Pattyn
问题/答案,我不喜欢黑色和白色的投票制度。