我使用jqGrid来显示数据。在我当前的网格中,所有列都是动态的。它来自网络服务。 我调用了$ .ajax调用来获取colNames和colModel之后我将colNames和colModel设置为jqGrid。
我发现网格显示空行(除行号外没有数据),页面显示正确。但它没有显示数据。
这是我的服务端代码。
[ScriptMethod(ResponseFormat = ResponseFormat.Json), WebMethod(EnableSession = true)]
public code.jqGridColumns GetColumnForSQLQuery()
{
System.Collections.Specialized.NameValueCollection QueryString = HttpContext.Current.Request.QueryString;
string Sql = String.Empty;
string dbName = String.Empty;
if (QueryString.Count > 0)
{
Sql = QueryString["Sql"].ToString();
dbName = QueryString["dbName"].ToString();
}
if (Sql.Contains("where"))
Sql = Sql + " and 1=2";
else
Sql = Sql + " where 1=2";
string connectionString = "data source = " + General.DBServer + "; initial catalog=" + dbName + ";Integrated security=false;User ID=" + General.SqlUserName + "; password=" + General.SqlPassword;
databaseDataContext db = new databaseDataContext(connectionString);
SqlCommand cmd = new SqlCommand(Sql, db.Connection as SqlConnection);
if (cmd.Connection.State != ConnectionState.Open)
cmd.Connection.Open();
System.Data.SqlClient.SqlDataReader dReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
DataSet dSet = null;
dSet = new DataSet();
dSet.Load((IDataReader)dReader, LoadOption.OverwriteChanges, "data");
dReader.Close();
dReader.Dispose();
DataTable dTable = new DataTable("Columns");
dTable.Columns.Add("ColumnName");
dTable.Columns.Add("Caption");
code.jqMetaData meta = new jqMetaData();
foreach (DataColumn column in dSet.Tables[0].Columns)
{
meta.ColModels.Add(new ColModel(column.ColumnName, column.ColumnName));
meta.ColNames.Add(new ColName(column.ColumnName));
}
code.jqGridColumns jqMetaData = new jqGridColumns();
jqMetaData.jqColNames = meta.GetColNames();
jqMetaData.jqColModels = meta.GetColModels();
return jqMetaData;
}
根据我在jqGrid中的技巧,它会正确返回数据。
这是我的JavaScript代码段。
var colM = [];// '[' + data.d.jqColModels + ']';
var colN = [];//'[' + data.d.jqColNames + ']';
colM = data.d.jqColModels.split('INECOM');
colN = data.d.jqColNames.split('INECOM');
var ServiceUrl = $.session.get("ClientURL") + '/GetDataBySqlQuery?dbName=' + $.session.get('dbName') + "&Sql=" + FMS;
$("#uxData").jqGrid({
url: ServiceUrl,
datatype: 'xml',
mtype: 'GET',
colNames: colN,//['CardCode']//
colModel: colM,//[{name:'CardCode',index:'CardCode'}], //
loadError: function (xhr, status, error) {
$(this).HideBusy();
alert(xhr.responseText);
}
...
...
});
在对jqGrid进行更多调查之后,我观察到jqGrid解析了这些模型并做好准备,我还观察到我做了一些我不理解的事情,但我确信它从colModel中提取信息并命名为:'somevalue',index :'somevalue'有点......
我的数据从网络服务返回有什么问题吗?
FYI