2014-09-11 23 views
0

我想使用sql server中的數據庫進行分組下拉列表。但它仍然是錯誤的。我可以返回數據類型DataTable到webform.aspx來設置分組下拉列表。我知道這是要說的。但我想當我向你展示你的代碼時,你可以理解更多。如何在ASP.NET中返回DataTable類型的json使(組DropdownList)

這是我的代碼在ASPX用這樣的腳本

<script type="text/javascript"> 
$('#<%=ddReport.ClientID %>').append(
      $('<option></option>').val('0').html('Please Wait...') 
      ); 
     $.ajax({ 
      url: "insertForm.aspx/GetreportDoctor", 
      data: "{}", 
      type: "POST", 
      dataType: "json", 
      contentType: "application/json; charset-utf-8", 
      success: OnSuccess, 
      error: OnError 
     }); 
     //for get selected value from codebehide 
     $('#<%= ddReport.ClientID%>').change(function() { 
      $('#<%= hfSelectedValue.ClientID%>').val($('#<%= ddReport.ClientID%>').val()); 
     }); 
    }); 
    function OnSuccess(data) { 
     $('#<%= ddReport.ClientID%>').empty(); 
     var dt = data; 
     var dropdown = $('#<%=ddReport.ClientID%>'); 
     var order = ""; 
     var optGroup; 

     for (var i = 0; i < dt.Rows.Count; i++) { 
      if (dt.Rows[i]["create_by"].toString() != order) { 
       optGroup = $("<optgroup style='background-color:#CCCC00' />"); 
       optGroup.attr('label', dt.Rows[i]["create_by"].toString()); 
      } 
      order = dt.Rows[i]["create_by"].toString(); 
      optGroup.append(
        $('<option></option>').val(dt.Rows[i]["rowID"].toString()).html(dt.Rows[i]["encode"]) 
       ); 
      dropdown.append(optGroup); 
     } 
     //for keep value after postback 
     $('<%=ddReport.ClientID%>').val($('#<%= hfSelectedValue.ClientID%>').val()); 
    } 
    function OnError() { 
     alert("Failed!!!"); 
    } 
</script> 

這是我的代碼在codebehide

[WebMethod] 
    public static DataTable GetreportDoctor() { 
     Dictionary<string, string> report_doc = new Dictionary<string, string>(); 
     SqlDataReader dr; 
     DataTable dt = new DataTable(); 

     SqlConnection EMR_Conn = new SqlConnection(@"Data Source=192.168.24.36;Initial Catalog=EMR;Persist Security Info=True;User ID=sa;Password=bpk$1234"); 
     EMR_Conn.Open(); 
     SqlCommand cmd_select = new SqlCommand("select rowID, encode, create_by FROM MED_main order by create_by", EMR_Conn); 
     dr = cmd_select.ExecuteReader(); 
     dt.Load(dr); 

     return dt; 
    } 

它去循環的OnError當我運行項目,以獲取數據。我在這種情況下怎麼辦,非常感謝。

回答

0

1)你可以返回XML

數據表。 WriteXml

jQuerySelect2更隨後能夠處理XML輸入。

2)如果你想JSON你可以使用我的方法

//add reference System.Data 
//add reference System.Web.extensions 
//add reference System.Web.DataTableExtensions 
public static string ConvertToJson(DataTable dt, int page = 0, int count = 100) 
{ 
    var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
    var rows = new List<Dictionary<string, object>>(); 
    foreach (DataRow dr in dt.AsEnumerable().Skip(page * count).Take(count).ToList()) 
    { 
     rows.Add(dt.Columns.Cast<DataColumn>().ToDictionary(col => col.ColumnName, col => dr[col])); 
    } 
    return serializer.Serialize(rows); 
} 
相關問題