自己寫的皮膚為了好看只取了Text沒有Value,現在用這個方法解決一下只有Text取Value值不方便的方式你只要有一個查詢這個表中所有數據的方法就可以了當然也可以只返回這兩列
程式碼
/// <summary>
/// 根據欄位欄位名稱取得索引
/// </summary>
/// <param name="fiId">欄位名稱</param>
/// <returns>欄位索引</returns>
private string GetFunctionNameByName(string Name)
{
var result = this.objWSM.GetFunctionInfo().AsEnumerable().Where(f1 => f1["fiName"].ToString().Trim() == Name.ToString().Trim()).FirstOrDefault() ;
return result["fiId"].ToString();
}
GetFunctionInfo是查詢表中所有資訊的方法
/// <summary>
/// 根據欄位索引取得欄位名稱
/// </summary>
/// <param name="fiId">欄位索引</param>
/// <returns>欄位名稱</returns>
private string GetFunctionNameById(int fiId)
{
var result = this._fiTable.AsEnumerable().Where(fi => Convert.ToInt32(fi["fiId"]) == fiId).FirstOrDefault();
return result["fiName"].ToString();
}
兩個方法是對應的,感覺這樣查詢方便不少,直接在前台就可以完成,跟資料庫連接的時候只要一個查詢所有的方法就可以了
來解釋一下這一步吧
this.objWSM.GetFunctionInfo().AsEnumerable().Where(f1 => f1["fiName"].ToString().Trim() == Name.ToString().Trim()).FirstOrDefault();
this.objWSM.GetFunctionInfo()是一個查詢所有的方法
AsEnumerable().Where()反回的是一個泛型的行,可以用LinQ表達式查詢
f1 => f1["fiName"].ToString().Trim() == Name.ToString().Trim())Linq表達式
F1是新產生的一個行的名稱
f1["fiName"].當然就是這個行裡的列名了,=>後面是條件前面是集合
f1["fiName"].ToString().Trim() == Name.ToString().Trim()就表示在這個行裡有這兩個值相等的,就取出來
FirstOrDefault();表示取第一行的意思
到這裡問題差不多都解決了,只要一個查詢這兩列的方法,在前台寫上這樣兩個方法,每次調用就OK了,不用專門的寫兩個訪問數據庫的方法,感覺還是很方便的。