今天在項目中再次碰到了問題,就是Combobox中的值如果是直接綁定很簡單。簡單添加項就行了。代碼如下:
<ext:ComboBox ID="ComBox_SecretsLevel" runat="server" FieldLabel="密級" Width="250" EmptyText="請選擇密級..." >
<Items>
<ext:ListItem Text="公開" Value="1"/>
<ext:ListItem Text="保密" Value="2" />
<ext:ListItem Text="絕密" Value="3" />
</Items>
</ext:ComboBox>
但是要從數據庫中獲取綁定該如何操作呢?
找了下網上的質量好像挺少的,去官網找了些Combobox的例子。雖然不是寫死在控件上,但是發現他也只不過是通過獲取后台的數組,然后綁定數據來操作的,也沒有真正的操作數據庫。於是我通過嘗試,結合了例子和實際,實現了綁定后台數據庫的要求,這邊與大家分享下。
這邊數據庫中的參數及值如圖:
獲取表中數據只要簡單的sql查詢語句,這邊就不詳細講解了。
在頁面中,首先是aspx頁面的代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LR_FileReg.aspx.cs" Inherits="EasyCreate.DFMS.WebUI.LR_FileReg" %>
<%@ Register assembly="Ext.Net" namespace="Ext.Net" tagprefix="ext" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>綁定Combobox后台數據</title>
</head>
<body>
<form id="form1" runat="server">
<ext:ResourceManager ID="ResourceManager1" runat="server"/>
<ext:Store ID="Store_SecretsCom" runat="server">
<Reader>
<ext:JsonReader>
<Fields>
<ext:RecordField Name="SecretsLevelID" Type="Int"/>
<ext:RecordField Name="SecretsLevelName" Type="String" />
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
<ext:ComboBox ID="ComBox_SecretsLevel" runat="server" FieldLabel="密級" Width="250" EmptyText="請選擇密級..."
StoreID="Store_SecretsCom" ValueField="SecretsLevelID" DisplayField="SecretsLevelName">
</ext:ComboBox>
</form>
</body>
</html>
后台.cs文件代碼:
H_FileLR h_file = new H_FileLR();//調用遠程服務及方法,進行基本的數據庫操作
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
//首次加載時執行
DataSet ds_Com= h_file.SecretCom(); //返回的值是DataSet類型的數據
DataTable dt_Com = ds_Com.Tables[0]; //獲取表中數據,Combobox一般的參數都是兩個:Value傳遞的參數和Test顯示的值
List<object> list = new List<object>(dt_Com.Rows.Count);
foreach (DataRow dr_Com in dt_Com.Rows) //遍歷獲取兩個值
{
list.Add(new
{
SecretsLevelID =Int32.Parse( dr_Com["SecretsLevelID"].ToString()),
SecretsLevelName = dr_Com["SecretsLevelName"].ToString()
});
}
Store_SecretsCom.DataSource = list; //綁定數據
Store_SecretsCom.DataBind();
}
}
下面的截圖是項目中的效果圖,不是很好,請見諒:
這樣,簡單的數據綁定就實現了,其實還是挺簡單的吧。大家有什么好的方法和建議都記得給我留言哈。該博文為本人原創,轉帖請注明出處,尊重著作權哈。
續文:
今天再次使用Comobox控件綁定數據庫中值的時候,試着嘗試了下新的方法,效果很好,與之前的方法簡單了好多。下面就和大家介紹下,而且能舉一反三。
if(!IsPostBack)
{
DataSet ds_Com = h_file.ComoboxBind();
DataTable dt_Secret = ds_Com.Tables[0]; //獲取表中密級表中數據,Combobox一般的參數都是兩個:Value傳遞的參數和Test顯示的值
foreach (DataRow dr_Secret in dt_Secret.Rows) //遍歷獲取兩個值
{
Ext.Net.ListItem Secretslist = new Ext.Net.ListItem(); //每次創建一個Ext.Net.ListItem的對象
Secretslist.Value = dr_Secret["SecretsLevelID"].ToString();
Secretslist.Text = dr_Secret["SecretsLevelName"].ToString();
ComBox_SecretsLevel.Items.Add(Secretslist);
}
}
分別遍歷的把每行的值賦值給該對象的Text和Value屬性。然后用Items.Add(Secretslist)的方法添加到List中即可。
用這種方法的好處太明顯了,沒有了上次說的Store的創建,也不用綁定ValueField和 DisplayField,簡直一舉多得啊!
其實,我們在寫前台的值的時候,忽略了他的實質,細心的朋友可能會巧妙的發現。其實前台的每個控件在后台都能創建出來,屬性也是能在后台重新賦值改變的。
<ext:ComboBox ID="ComBox_SecretsLevel" runat="server" FieldLabel="密級" Width="250" EmptyText="請選擇密級..." >
<Items>
<ext:ListItem Text="公開" Value="1"/>
<ext:ListItem Text="保密" Value="2" />
<ext:ListItem Text="絕密" Value="3" />
</Items>
</ext:ComboBox>
我們可以巧妙的發現:ComBox_SecretsLevel.Items.Add(Secretslist);就是相當於給ListItem中添加每項。
這次使我更加堅定了信念,只要堅持,就一定會有收獲。每天哪怕進步一點點也是新的提高。