2012-08-10 21 views
0

我有一个DataTable,我从数据库中获得,我想在后面的代码中创建一个2d数组(一旦我得到DataTable ..),然后将其作为2d传递数组转换为Javascript。传递2d数组从代码背后到javascript

这就是我试图代码:

int[,] videoQarray = new int[dt_questionVideo.Rows.Count,dt_questionVideo.Columns.Count ]; 
     string[,] videoQarrayTitle = new string[dt_questionVideo.Rows.Count, dt_questionVideo.Columns.Count ]; 

     for (var i = 0; i < dt_questionVideo.Rows.Count ; i++) 
     { 
      for (int j = 0; j < dt_questionVideo.Columns.Count; j++) 
      { 

       videoQarray[i,j] = Convert.ToInt32(dt_questionVideo.Rows[i][0]); 
       videoQarrayTitle[i,j] = dt_questionVideo.Rows[i][1].ToString(); 
      } 
     } 

     string createArrayScript = string.Format("var videQarray = [{0}];", string.Join(",", videoQarray)); 
     createArrayScript += string.Format("var videQarrayList = [{0}];", string.Join(",", videoQarrayTitle)); 

     Page.ClientScript.RegisterStartupScript(this.GetType(), "registerVideoQArray", createArrayScript, true); 

好,它说,videoQarray没有定义浏览器控制台.. 我不知道我该怎么做正确..

回答

1

可能该变量是在函数内部定义的,因此对于其他代码部分是隐藏的。尝试“window.videoQArray” insted的的“变种”:

string createArrayScript = string.Format("window.videQarray = [{0}];", string.Join(",", videoQarray)); 
createArrayScript += string.Format("window.videQarrayList = [{0}];", string.Join(",", videoQarrayTitle)); 

编辑:这是一个二维数组(好吧,你写道,在这个问题很清楚,但我没有看到)。使用JavaScriptSerializer

var serializer = new JavaScriptSerializer(); 
string createArrayScript = string.Format("window.videQarray = {0};", serializer.Serialize(videoQarray)); 
createArrayScript += string.Format("window.videQarrayList = {0};", serializer.Serialize(videoQarrayTitle)); 
+0

nope。同样的错误.. – thormayer 2012-08-10 21:06:41

+1

谢谢!有效! – thormayer 2012-08-10 21:20:25

0

使用以下功能:

public static string ArrayToString2D(string[,] arr) 
    { 
     StringBuilder str = new StringBuilder(); 
     str.Append("[['"); 
     for (int k = 0; k < arr.GetLength(0); k++) 
     { 
      for (int l = 0; l < arr.GetLength(1); l++) 
      { 
       if (arr[k, l] == null) 
        str.Append("','"); 
       else 
        str.Append(arr[k, l].ToString() + "','"); 
      } 
      str.Remove(str.Length - 2, 2); 
      str.Append("],['"); 
     } 
     str.Remove(str.Length - 4, 4); 
     str.Append("]]"); 
     return str.ToString(); 
    } 

在后面的代码具有以下属性:

private string[,] upperLabels ; 
    public string UpperLabel 
    { 
     get 
     { return Utils.ArrayToString2D(upperLabels); } 
    } 
在JavaScript

使用以下命令:

var upperSplitted = <%=UpperLabel%> ; 
var value = upperSplitted[0][0];