2014-09-11 34 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); 
} 
相关问题