0

クラスを取得し、datgaridviewをジェネリックリストとして入力しようとしています。リストに問題が発生しdapuConfigs.CoveredLanes、リストにアクセスしてdatagridviewに入力しようとしましたが、成功しませんでした。ここでは両方のアプローチが間違っている可能性があります...!私を助けてください??

実行すると、グリッドセルにテキストが表示されます:システムコレクションのジェネリックリスト。

追加されたコード:

  .ForEach(
              Configs =>
                  {  
                      { 
                          datagridview1.Rows.Add(
                              new object[]
                                  {
                                      Configs.Id,
                                      Configs.Description,
                                      Configs.Covered.ElementAtOrDefault(0).Id == null ? "" : Configs.Covered.ElementAtOrDefault(0).Id.ToString(),
                                      Configs.Covered.ElementAtOrDefault(1).Id == null ? "" : Configs.Covered.ElementAtOrDefault(1).Id.ToString(),
                                      Configs.Covered.ElementAtOrDefault(2).Id == null ? "" : Configs.Covered.ElementAtOrDefault(2).Id.ToString(),
                                      Configs.Covered.ElementAtOrDefault(3).Id == null ? "" : Configs.Covered.ElementAtOrDefault(3).Id.ToString(),

}); }});

4

3 に答える 3

2

だから、あなたが持っているところ

dapuConfigs.CoveredLanes.ToList(),

最初の例では、次のように変更してみてください。

dapuConfigs.CoveredLanes.ElementAtOrDefault(0) == null ? "" : dapuConfigs.CoveredLanes.ElementAt(0).ToString(),
dapuConfigs.CoveredLanes.ElementAtOrDefault(1) == null ? "" : dapuConfigs.CoveredLanes.ElementAt(1).ToString(),
dapuConfigs.CoveredLanes.ElementAtOrDefault(2) == null ? "" : dapuConfigs.CoveredLanes.ElementAt(2).ToString(),
dapuConfigs.CoveredLanes.ElementAtOrDefault(3) == null ? "" : dapuConfigs.CoveredLanes.ElementAt(3).ToString(),

または、Idでのマッチング用

dapuConfigs.CoveredLanes.First(cl=>cl.Id=="").ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id=="").ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id=="").ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id=="").ToString(),

またはidのより一般的な一致...

dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString(),
dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString(),

andd一致しないチェックを追加します...

dapuConfigs.CoveredLanes.Any(cl=>cl.Id.Contains("")) ? dapuConfigs.CoveredLanes.First (cl=>cl.Id.Contains("")).ToString() : "",
dapuConfigs.CoveredLanes.Any(cl=>cl.Id.Contains("")) ? dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString() : "",
dapuConfigs.CoveredLanes.Any(cl=>cl.Id.Contains("")) ? dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString() : "",
dapuConfigs.CoveredLanes.Any(cl=>cl.Id.Contains("")) ? dapuConfigs.CoveredLanes.First(cl=>cl.Id.Contains("")).ToString() : "",
于 2012-10-19T09:47:30.687 に答える
1

dapuConfigs.CoveredLanesフィールドに表示するには、の値を集計する必要があります。例として、文字列値が含まれている場合は、次のように実行できます。

string.Join(",", dapuConfigs.CoveredLanes.ToArray())

カンマ区切りのリストを生成します。

または、最初の4つのアイテムを表示するには、次のようにオブジェクトを作成します。

new object[]
{
dapuConfigs.Id,         //col0
dapuConfigs.Description, //col1
dapuConfigs.CoveredLanes.ElementAt(0), //col2
dapuConfigs.CoveredLanes.ElementAt(1),//col3
dapuConfigs.CoveredLanes.ElementAt(2), //col4
dapuConfigs.CoveredLanes.ElementAt(3),//col5
dapuConfigs.Position.Value, //col6
dapuConfigs.Position.Value,//col7
}

そして、フォーマットコードをある種のフォーマッタオブジェクトに抽象化するのが賢明でしょう。

これにアプローチするためのより別個の方法は、CellFormattingイベントに接続し、セルがデータをフォーマットする方法を変更することです。このようにして、私が投稿したスニペットのように、表現ロジックがモデルにブリードすることはありません。 http://msdn.microsoft.com/en-us/library/2249cf0a.aspx

于 2012-10-19T09:27:08.590 に答える
1

あなたはこのようにすることができます

private void BindGrid()
{
    List<string> lst = new List<string>();
    lst.Add("A");
    lst.Add("D1");
    lst.Add("A2");
    lst.Add("A3");

    List<Test> tst = new List<Test>();
    Test t = new Test();
    t.ListValue = lst;
    t.ID = 1;
    tst.Add(t);

    lst = new MyList();
    lst.Add("B");
    lst.Add("B1");
    lst.Add("A2");
    lst.Add("B3");

    t = new Test();
    t.ListValue = lst;
    t.ID = 2;
    tst.Add(t);

    lst = new MyList();
    lst.Add("C");
    lst.Add("B1");
    lst.Add("C2");
    lst.Add("C3");

    t = new Test();
    t.ListValue = lst;
    t.ID = 3;
    tst.Add(t);
    ArrayList a = new ArrayList();
    try
    {
        var lst2 = (from b in tst
                    select new
                    {
                        b.ID,
                        col2 = string.Join(Environment.NewLine, b.ListValue.Where(x => x.StartsWith("A")).ToArray()),
                        col3 = string.Join(Environment.NewLine, b.ListValue.Where(x => x.StartsWith("B")).ToArray()),
                        col4 = string.Join(Environment.NewLine, b.ListValue.Where(x => x.StartsWith("C")).ToArray())
                    }).ToList();

        GridView1.DataSource = lst2;
        GridView1.DataBind();
    }
    catch (Exception ex)
    {
        string ss = ex.Message;
    }

}

public class Test
{
public int ID { get; set; }
public List<string> ListValue { get; set; }
}
于 2012-10-19T10:40:35.073 に答える