【问题标题】:how can bind gridview to array如何将gridview绑定到数组
【发布时间】:2011-09-16 20:24:58
【问题描述】:

我想将二维数组绑定到 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();

【问题讨论】:

    标签: c# .net asp.net data-binding string


    【解决方案1】:

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

    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();
      

      【讨论】:

      • “调用两次”的解决方法是“调用一次”:)。
      • @Alex 如果您能想出跳过第二个冗余电话的方法,请随时编辑答案。
      • 我认为最好不要一开始就创建aQS数组。
      • 在您的第一个版本中,您可以这样做以避免双重拆分: var data = from s in aQS let split = s.Split('=') select new { Col1 = split[0], Col2 = split[1] };
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 2014-07-29
      相关资源
      最近更新 更多