2011-06-17 61 views
1

我想将2d数组绑定到gridview。如何做到这一点。我也附加我的代码。如果有任何其他方式,那么也建议我。如何绑定gridview到数组

 string sQS; 
     string[] aQS; 
     string pwd = "ebskey"; 
     string DR = Request.QueryString["DR"].ToString(); 
     DR = DR.Replace(' ', '+'); 
     sQS = Base64Decode(DR); 
     DR = EBSHelper.Decrypt(pwd, sQS, false); 
     aQS = DR.Split('&'); 
     int p1 = aQS.Length; 
     string[,] pp = new string[p1,2]; 
     for (int i = 0; i < aQS.Length; i++) 
     { 
      string[] aParam = aQS[i].Split('='); 
      pp[i,0] = aParam[0].ToString(); 
      pp[i,1] = aParam[1].ToString(); 

     } 
     GridView1.DataSource = pp; 
     GridView1.DataBind(); 

回答

2

据我了解你的输入字符串是这样的:

var inputString = "key1=value1&key2=value2&key3=value3"; 

下面的代码将解析字符串,做一个清单,并将其绑定到一个网格。

var list = Regex.Matches(inputString, @"(?<key>\w+)=(?<value>\w+)(&|$)") 
    .Cast<Match>() 
    .Select(arg => new { Key = arg.Groups["key"].Value, Value = arg.Groups["value"].Value }) 
    .ToList(); 
GridView1.DataSource = list; 
GridView1.DataBind(); 

所以你的最终代码应该是这样的:

string pwd = "ebskey"; 
string DR = Request.QueryString["DR"]; 
DR = DR.Replace(' ', '+'); 
string sQS = Base64Decode(DR); 
DR = EBSHelper.Decrypt(pwd, sQS, false); 

var list = Regex.Matches(DR, @"(?<key>\w+)=(?<value>\w+)(&|$)") 
    .Cast<Match>() 
    .Select(arg => new { Key = arg.Groups["key"].Value, Value = arg.Groups["value"].Value }) 
    .ToList(); 
GridView1.DataSource = list; 
GridView1.DataBind(); 
2

我会尝试这样的事情,而不是一个二维数组。

var data = aQS.Select(s => new {Col1 = s.Split('=')[0], Col2 = s.Split('=')[1]}); 
GridView1.DataSource = data; 
GridView1.DataBind(); 

我不喜欢打电话Split()两次,但我不知道如何解决这一点。

,或者你可以让事情变得真正简单明了,并创建一个简单的类

class RowData{ 
    public string Col1Value {get; set;} 
    public string Col2Value {get; set;} 
} 

,你可以做

List<RowData> rows = new List<RowData>(); 
for (int i = 0; i < aQS.Length; i++) 
{ 
     string[] aParam = aQS[i].Split('='); 
     RowData row = new RowData {Col1Data = aParam[0], Col2Data = aParam[1]}; 
     rows.Add(row); 
} 

GridView1.DataSource = rows; 
GridView1.DataBind(); 
+0

变通办法是“叫了两次”是“称之为一次” :)。 – 2011-06-17 01:35:01

+0

@Alex如果您能想出一种方法跳过第二个冗余呼叫,请随时编辑答案。 – 2011-06-17 01:36:34

+0

我认为最好不要首先制作'aQS'阵列。 – 2011-06-17 01:40:33