厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(2)----常用操作

weixin_34337265發表於2016-08-06

自從上篇隨筆《厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(1)》一文以來,得到同行很多人的鼎力支援和關注,並且在大家的推動下,這篇文章也是上榜部落格頭條、編輯推薦、10天內推薦排行等榮譽,很多人對這些類庫很是感興趣,也希望進一步詳細介紹相關類庫的使用。本隨筆系列將逐步介紹相關的類庫的詳細使用,並逐步整理成CHM的幫助文件,作為類庫使用的指引手冊,同時我會對類庫進行進一步的豐富、提煉和優化,隨筆將逐步傳送,感謝大家的支援和鼓勵。
1、程式配置管理輔助類 AppConfig **
實現效果
1、 本輔助類主要是用來方便獲取或設定系統配置項的輔助類,實現快速讀寫配置檔案的內容,可以用於讀取
.exe.Config檔案或者Web.config的檔案內容,或者可以讀取指定檔案的配置項。
2、 輔助類預設從當前目錄中按順序檢索Web.Config和
.exe.Config檔案。如果找到一個,則使用它作為預設的配置檔案,不需要指定檔案路徑。
3、 讀取的檔案格式是一般的XML配置檔案格式,如下所示。

<?xml version="1.0" encoding="utf-8" ?>   
<configuration>   
  <configSections>   
    <section name="dataConfiguration"   
             type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data"/>   
  </configSections>   
  <connectionStrings>   
    <add name="DataAccess" providerName="System.Data.SqlClient"   
         connectionString="Persist Security Info=False;Data Source=(local);Initial Catalog=Warehouse;User ID=sa;Password=123456"/>   
  </connectionStrings>   
  <dataConfiguration defaultDatabase="DataAccess"/>   
   
  <appSettings>   
    <!--軟體名稱-->   
    <add key="ApplicationName" value="深田之星倉庫管理系統"/>   
    <!--開發商名稱-->   
    <add key="Manufacturer" value="廣州愛啟迪技術有限公司"/>   
    <!--字典、許可權元件的資料庫型別:access、sqlserver等,預設為sqlserver可不寫-->   
    <add key="ComponentDbType" value="sqlserver"/>   
  </appSettings>   
</configuration>  

實現程式碼

1、 讀取配置專案。
AppConfig config = new AppConfig();    
string Manufacturer = config.AppConfigGet("Manufacturer");    
string ApplicationName = config.AppConfigGet("ApplicationName");    
string AppWholeName = string.Format("{0}-{1}", Manufacturer, ApplicationName);  

2、 讀取複雜的連線字串配置,如上面的EnterpriseLibrary的連線字串 DataAccess 配置專案的ConnectString。

/// <summary>    
/// 測試資料庫是否正常連線    
/// </summary>    
/// <returns></returns>    
public static bool TestConnection(string connectionString)    
{    
    bool result = false;    
   
    using (DbConnection connection = new SqlConnection(connectionString))    
    {    
        connection.Open();    
        if (connection.State == System.Data.ConnectionState.Open)    
        {    
            result = true;    
        }    
    }    
   
    return result;    
}    
   
public static bool TestConnection()    
{    
    AppConfig config = new AppConfig();    
    return TestConnection(config.GetConnectionString("DataAccess"));    
}  

3、 寫入配置項內容。

AppConfig config = new AppConfig();    
//儲存地址(標準呼叫)    
config.AppConfigSet("PictureRootDir", this.txtPath.Text);    
   
//儲存EnterpriseLibray資料庫配置項(自定義設定)    
string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}Database1.mdb;User ID=Admin;Jet OLEDB:Database Password=;", System.AppDomain.CurrentDomain.BaseDirectory);    
config.SetConnectionString("DataAccess", connectionString);    
//更新配置檔案,以便起效    
ConfigurationManager.RefreshSection("dataConfiguration");    
ConfigurationManager.RefreshSection("connectionStrings");   
ConfigurationManager.RefreshSection("appSettings"); 

**2、訊息提示對話方塊輔助類 MessageUtil******


** 實現效果**
1、本輔助類主要是用來方便實現標準統一的訊息提示對話方塊,由於各種按鈕的樣式、標題都進行了統一分裝,因此呼叫的時候,這些引數都可以不用考慮,省卻很多繁瑣的引數指定,是Winform開發中非常常用的一個類庫輔助類。

2、封裝的訊息提示對話方塊包括個各種常用的對話方塊,如下所示:
2551534-3a9cfc2d66971e8d.png

實現程式碼

MessageUtil.ShowTips("提示資訊對話方塊");    
MessageUtil.ShowWarning("警告訊息提示框");    
MessageUtil.ShowError("錯誤訊息提示框");    
   
MessageUtil.ShowYesNoAndTips("提示對話方塊,有Yes/No按鈕");    
MessageUtil.ShowYesNoAndWarning("警告對話方塊,有Yes/No按鈕");    
MessageUtil.ShowYesNoAndError("錯誤對話方塊,有Yes/No按鈕");    
MessageUtil.ShowYesNoCancelAndTips("提示對話方塊,有Yes/No/Cancel按鈕");    
   
MessageUtil.ConfirmYesNo("確認對話方塊,有Yes/No對話方塊");  
MessageUtil.ConfirmYesNoCancel("確認對話方塊,有Yes/No/Cancel對話方塊"); 

3、日曆類輔助類 CCalendar
** 實現效果**
1、 本輔助類主要是用來方便顯示日期時間、農曆、生肖的日曆類,並可以計算農曆很多屬性,並且通過一個函式提供一個全面的日期資訊,可以用於裝飾介面的效果。
2、 其效果如下所示

2551534-22b004ad1d9a8e82.png

** 實現程式碼**** **

CCalendar cal = new CCalendar();  
this.lblCalendar.Text = cal.GetDateInfo(System.DateTime.Now).Fullinfo;  

一般節日會提示相關的節日資訊,另外可以通過修改XML檔案,實現對節日、時間提示等資訊調整。

<?xml version="1.0" encoding="gb2312" ?>   
<HELLO>   
   
  <!-- 公曆節日開始 -->   
  <AD>   
    <feast day="0101" name="元旦" sayhello="yes">   
      <hello>新年好!祝您在新的一年裡身體健康,事業進步!</hello>   
      <!-- 從網站根目錄算起 -->   
      <img>./img/theme/0101.gif</img>   
    </feast>   
    <feast day="0202" name="世界溼地日" sayhello="no">   
      <img></img>   
      <hello></hello>   
    </feast>   
    <feast day="0210" name="國際氣象節" sayhello="no">   
      <img></img>   
      <hello></hello>   
    </feast>   
    <feast day="0214" name="情人節" sayhello="yes">   
      <hello>祝天下有情人終成眷屬!</hello>   
      <img>./img/theme/0214.gif</img>   
    </feast>   
    <feast day="0301" name="世界圖書日" sayhello="no">   
      <img></img>   
      <hello></hello>   
    </feast>   
.............

4、托盤圖示輔助類 NotifyIconHelper **
** 實現效果

1、 本輔助類主要是用來方便動態設定托盤圖示。該輔助類用於一些實時連線要求或者狀態變化能夠及時通過圖表來顯示的程式,通過閃動的圖示及文字,可以有效提示使用者相關的程式狀態,提供使用者的使用體驗。
2、 動態設定托盤圖示,其效果如下所示

2551534-6b26e24ef18da240.png

2551534-7abef8bfe36704d7.png

** 實現步驟**

1、在主窗體新增一個NotifyIcon元件,並設定好相關的屬性,如下所示
2551534-ba2912e4efd4c851.png

2、 在程式碼引用相關的程式碼實現動態呼叫。

** 實現程式碼**

public partial class FrmMain : Form    
{    
    private NotifyIconHelper notifyHelper;    
    private const string ClientName = "資料採集終端";//PC式採集器終端    
   
    public frmMain()    
    {    
        InitializeComponent();    
   
        this.Text = ClientName;    
        //初始化托盤圖示    
        notifyHelper = new NotifyIconHelper(this.notifyIcon1);    
        notifyHelper.Icon_Conntected = Resources.Connected;    
        notifyHelper.Icon_Shrink1 = Resources.shrink1;    
        notifyHelper.Icon_Shrink2 = Resources.shrink2;    
        notifyHelper.Icon_UnConntect = Resources.unConnected;    
        notifyHelper.Text_Conntected = string.Format("{0}:終端已經連線", ClientName);    
        notifyHelper.Text_UnConntect = string.Format("{0}:終端未連線", ClientName);    
        notifyHelper.NotifyStatus = NotifyIconHelper.Status.TwinkleNotice;    
    }    
   
    /// <summary>    
    /// 設定托盤圖示的狀態    
    /// </summary>    
    /// <param name="status"></param>    
    public void SetNotifyStatus(NotifyIconHelper.Status status)    
    {                
        notifyHelper.NotifyStatus = status;    
   
        if (status == NotifyIconHelper.Status.Offline)    
        {    
            this.Invoke(new MethodInvoker(delegate()    
            {    
                this.Icon = notifyHelper.Icon_UnConntect;    
            }));                    
        }    
        else if (status == NotifyIconHelper.Status.Online)    
        {    
            this.Invoke(new MethodInvoker(delegate()    
            {    
                this.Icon = notifyHelper.Icon_Conntected;    
            }));       
        }    
    }  

**5、DataTable操作輔助類 DataTableHelper **
實現效果
1、本輔助類主要是用來方便對DataTable進行相關操作的輔助類,該類是非常常用的工具類,常用與資料顯示、轉換和報表生成等操作中。
2、 提供的操作,包括有建立表、DataTable和實體類集合IList<T>相互轉化、表排序、表過濾等操作,以求達到快速進行DataTable操作的目的。

實現程式碼
1、 根據欄位建立表物件,多個列用逗號(,)分開,預設為表物件的列為string。

string columns = @"流水號,備註,供貨商,操作員,庫房名稱,備件編號(pm碼),備件名稱,圖號,規格型號,材質,備件屬類,備件類別,
單位,最新單價(元),入庫數量,總價,入庫日期,來源,庫位,部門,使用位置";    
DataTable dt = DataTableHelper.CreateTable(columns);   

2、根據欄位建立表物件,多個列用逗號(,)分開。如需要制定列的型別,在欄位後加上“|int”格式的字元。

string tableColumns = "ID|int,ItemNo,ItemName,StockQuantity|int,Manufacture,MapNo,Specification,Material,ItemBigType,ItemType,
Unit,Price|decimal,Source,StoragePos,UsagePos,Note,WareHouse,Dept";    
DataTable dt = DataTableHelper.CreateTable(tableColumns);  

3、 實體類轉DataTable物件操作ListToDataTable,其對應的反操作函式DataTableToList使用方法類似。

string where = GetSearchSql();    
IList<CustomerInfo> list = BLLFactory<Customer>.Instance.Find(where, this.winGridViewPager1.PagerInfo);    
DataTable dt = DataTableHelper.ToDataTable<CustomerInfo>(list);    
this.winGridViewPager1.DataSource = dt.DefaultView;    
this.winGridViewPager1.dataGridView1.Refresh(); 

4、 DataTable物件排序操作SortedTable,可對錶多列進行排序操作。

string where = GetSearchSql();    
IList<CustomerInfo> list = BLLFactory<Customer>.Instance.Find(where, this.winGridViewPager1.PagerInfo);    
DataTable dt = DataTableHelper.ToDataTable<CustomerInfo>(list);    
DataTable dtSort = DataTableHelper.SortedTable(dt, new string[]{"Number asc", "Type desc"});

相關文章