2011-08-05 10 views
1

私はLinqを使用して取得したdbに格納されたファイルのリストを持っています。私はそれらをASP ListViewに入れたいと思っています。DataGridのフィールドでListViewを使用するには?

このファイルはポリシーへの添付ファイルなので、1つのポリシーに複数のポリシーがある可能性があります。

ListViewはDataGridのフィールドに配置されますが、そこに配置する方法が見つからず、これが私の質問です。また、これらのファイルをダウンロードできるようにしたいと思いますが、選択されているかどうか確認できる要素はありません。

追加情報:(DataFieldsで)> BoundColumns - - > DataGridの - >列 は、私がパネルを持っているASPXで

myDataGrid.DataSource = linqQuery.ToList(); 
myDataGrid.DataKeyField = "IdPolicy"; 
myDataGrid.DataBind(); 

でのDataGridでデータをバインドします。

助けてください。

答えて

0

DataGridの各項目をループしてListViewに入力することができます。

enter image description here

<asp:DataGrid ID="DataGrid1" runat="server" AutoGenerateColumns="false" 
    OnItemDataBound="DataGrid1_DataBound"> 
    <Columns> 
     <asp:BoundColumn DataField="IdPolicy" HeaderText="Policy" ReadOnly="True" /> 
     <asp:TemplateColumn HeaderText="Files"> 
      <ItemTemplate> 
       <asp:ListView ID="ListView1" runat="server" ItemPlaceholderID="Panel1"> 
        <LayoutTemplate> 
         <asp:Panel ID="Panel1" runat="server" /> 
        </LayoutTemplate> 
        <ItemTemplate> 
         <%# Container.DataItem %><br /> 
        </ItemTemplate> 
       </asp:ListView> 
      </ItemTemplate> 
     </asp:TemplateColumn> 
    </Columns> 
</asp:DataGrid> 

public partial class WebForm1 : System.Web.UI.Page 
{ 
    public class Policy 
    { 
     public int IdPolicy { get; set; } 
     public List<string> Files { get; set; } 
    } 

    private List<Policy> _policies; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      _policies = new List<Policy>(); 
      _policies.Add(new Policy 
      { 
       IdPolicy = 1, 
       Files = new List<string> {"One.jpg", "Two.jpg"} 
      }); 

      _policies.Add(new Policy 
      { 
       IdPolicy = 2, 
       Files = new List<string> {"TwentyOne.jpg", "TwentyTwo.jpg"} 
      }); 

      DataGrid1.DataSource = _policies; 
      DataGrid1.DataBind(); 
     } 
    } 

    protected void DataGrid1_DataBound(object sender, DataGridItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      var policy = e.Item.DataItem as Policy; 

      var listView1 = e.Item.FindControl("ListView1") as ListView; 

      listView1.DataSource = policy.Files; 
      listView1.DataBind(); 

     } 
    } 
} 
+0

あなたの答えをありがとう、非常に有用;)。非常に包括的。 – Mattaniel

0

GridTemplateColumnを使用して、ListViewをItemTemplateに追加します。 ListViewはDataGridにネストされるので、ItemDataBoundイベント(または他の場所)でプログラムでバインドする必要があります。

((ListView)e.Item.FindControl("ListView1")).DataSource = ListViewDataSource; 
+0

それも役立ちました、あなたの答えをいただき、ありがとうございます。 – Mattaniel

関連する問題