4

例:

<asp:GridView ID="reportScheduleDetailsGridView" runat="server" AutoGenerateColumns="False"  >                
                <Columns>
                    <asp:BoundField DataField="Name" HeaderText="Name" ></asp:BoundField>
                    <asp:BoundField DataField="Frequency" HeaderText="Frequency" ></asp:BoundField>
                    <asp:TemplateField HeaderText="Reports" >
                        <ItemTemplate>
                            <asp:Label ID="cblSubscribedReports" Text='<%# Eval("Reports") %>'  runat="server"/>
                        </ItemTemplate>
                        </asp:TemplateField>
                </Columns>
         </asp:GridView>

コード:

               DataTable table = new DataTable();
                table.Columns.Add("Name");
                table.Columns.Add("Frequency");
                table.Columns.Add("Reports");

                DataRow row1 = table.NewRow();
                row1["Name"] = "A";
                row1["Frequency"] = "Daily";
                    List<string> report1 = new List<string>();
                    report1.Add("XYZ");
                    report1.Add("ABC");
                    report1.Add("PQR");
                    row1["Reports"] = report1;
                table.Rows.Add(row1);

                DataRow row2 = table.NewRow();
                row2["Name"] = "B";
                row2["Frequency"] = "Weekly";
                    List<string> report2 = new List<string>();
                    report2.Add("XYZ");
                row2["Reports"] = report2;
                table.Rows.Add(row2);

                reportScheduleDetailsGridView.DataSource = table;
                reportScheduleDetailsGridView.DataBind();   

コードを実行すると、Reports 列に文字列値ではなく System.Collections.Generic が表示されます

Name    Frequency       Reports
A           Daily         System.Collections.Generic.List`1[System.String] 
B           Weekly        System.Collections.Generic.List`1[System.String] 

次のような出力が必要です: レポート列には文字列のリストが表示されるはずです

Name    Frequency   Reports
A            Daily            1.XYZ
                          2.ABC
                          3.PQR
B           Weekly            1.XYZ
4

4 に答える 4

0

列にオブジェクトを表示しようとしています。TemplateColumn のラベルは、文字列値のリストを表示する方法を知りません。次のように、ラベルに文字列を配置する必要があります。

int i = 2;
var res = "1. " + report1.Aggregate((c, n) => c + String.Format("\r\n{0}. {1}", i++, n));
row1["Reports"] = res;

これにより、期待される結果が得られます。

于 2013-06-26T09:02:52.297 に答える
0

GridView は、コレクションを表示する方法を自動的に把握できません。

レポート列内に別のデータ バインド コントロール (ListView または GridView) を配置し、それを RowDataBound などのイベントでレポートのリストにバインドできます。

参照: ASP.NET での階層データ バインディング

      <ItemTemplate>        
        <asp:Repeater Runat="server" EnableViewState="false"
             DataSource='<%# DataBinder.Eval(Container.DataItem, "Reports")%>'>
          <ItemTemplate>
            <br/><asp:Label ID="cblSubscribedReports" 
                  Text='<%# DataBinder.Eval(Container.DataItem, "Report") %>'/>
          </ItemTemplate>
        </asp:Repeater>
      </ItemTemplate>
于 2013-06-26T09:05:31.720 に答える