1. 程式人生 > >從資料庫中獲取值填入下拉列表,然後做二級關聯所產生的一系列問題

從資料庫中獲取值填入下拉列表,然後做二級關聯所產生的一系列問題

今晚因為需要研究jquery動態繫結兩個下拉列表框,並且使兩個下拉列表框聯絡起來,所以做了下小例子
首先,建立了兩張表這裡寫圖片描述
每個表裡包含兩個欄位,一個id,一個名字
插入了一些資料,兩張表通過ID進行關聯,這是資料庫的做法

然後CS檔案中寫的程式碼如下:

public partial class _Default : System.Web.UI.Page
{
    public string Json = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        Json =JsonConvert.SerializeObject(getData(), new
DataTableConverter()); } public DataSet getData() { string constr = ConfigurationManager.ConnectionStrings["Constr"].ToString(); SqlConnection conn = new SqlConnection(constr); conn.Open(); string conname = "select * from tb_pro"; DataSet ds = new
DataSet(); SqlDataAdapter adpter = new SqlDataAdapter(conname, conn); adpter.Fill(ds); return ds; } }

寫到這裡的時候出現了一些小問題,說一下,第一個寫webconfig檔案時,用的是connectionString,然後獲取的時候用成了appsettings,所以報錯了,研究了好大一會。並且連結字串寫錯資料庫了,粗心是萬萬要不得的。

第二個,後臺向前臺傳值的時候的,要繫結資料,前臺不會寫了,網上各種搜資料, <%=Json%>,前臺要這樣寫,沒有驗證
<%:Json%>,並且後臺的Json必須宣告為public ,如上程式碼所示,然後前臺才能讀取到,否則的話會一直提示Json不存在。

第三個,後臺當時返回的是一個值,因為是下拉列表框,所以就要返回一組值,然後就找了各種方法,發現用json進行轉換是比較方便的,於是下載了一個Newtonsoft.Json.dll檔案,引入,然後前邊要加
using Newtonsoft.Json;
因為用了一個
Json =JsonConvert.SerializeObject(getData(), new DataTableConverter());,
所以還要加
using Newtonsoft.Json.Converters;
當然不加就要在下邊寫出來了。還有自己手動轉換,不過這個很簡單。
前臺Jquery還沒有找到跟公司類似的方法,因為在網上看了那麼多例子,還是發現公司的最簡單,所以明天會繼續寫,前臺解析json,最後才做兩個下拉列表關聯。很晚了,要睡覺了。明天繼續更新

接著更新
講述方法後臺返回一個JSON,前臺操作
後臺傳送了一個JSON格式的資料,前臺就要接受這個資料,用.getJSONdata.getJSON(‘Default2.aspx’,function(data){})
後臺的話要用傳值,就要return JSON了,
據我的理解是data是後臺傳值過來的Json,然後接著用
$.each()方法進行反序列化,如果要支援IE6以上呢,就用for迴圈
這裡寫圖片描述
如圖片中的each和for迴圈
(注:圖片中的ajaxHandler是自己封裝的一個方法)

.ajax(.get :類似於在瀏覽器中直接輸入網址,只能通過Url傳引數;
.postFireBug.getJSON:是get的一種,是$.ajax的一個特例,修改ajax的返回型別引數為json完全可以實現getJSON()的功能
這些都是做非同步請求用的
理解了他們的含義後就知道應該怎麼去操作了

在說一說二級關聯,我的實現思路是這樣的,我找到表一的ID,然後在select1中進行change時,根據select1中文字的ID進行select2中文字的查詢(因為表一和表2是通過ID進行關聯的),實現程式碼如上圖所示。

還有或者可以直接respose.write(js),js的功能是,通過迴圈表直接獲取每行的值,然後寫到前臺的相應位置。具體怎麼實現就動手去做吧。其實還是思路最重要