2010-10-31 24 views
1

Je n'arrive pas à lier correctement une seule ligne de GridView à un DetailsView. À l'heure actuelle, j'ai ceci:C# Façon moins obscure de remplir un DetailsView?

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Web.UI.WebControls; 

namespace WebApp 
{ 
    public partial class CrudGrid : System.Web.UI.UserControl 
    { 
     public const string EditCommand = "EditDialog"; 

     public object DataSource 
     { 
      get { return Grid.DataSource; } 
      set { Grid.DataSource = value; } 
     } 

     protected void Page_Load(object sender, EventArgs e) 
     { 
     } 

     protected void Grid_OnRowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      switch(e.CommandName) 
      { 
       case EditCommand: 
       { 
        int index; 

        if(!int.TryParse(e.CommandArgument.ToString(), out index)) 
         throw new ArgumentException(); 

        TableCellCollection cells = Grid.Rows[index].Cells; 

        Details.DataSource = new object[] { new DataSourceProvider(cells[2].Text, cells[3].Text, cells[4].Text) }; 
        Details.DataBind(); 

        DetailsPanel.Update(); 
        break; 
       } 
      } 
     } 

     protected void Grid_OnRowDeleting(object sender, GridViewDeleteEventArgs e) 
     { 
     } 

     private class DataSourceProvider 
     { 
      public string Cell1 { get; set; } 
      public string Cell2 { get; set; } 
      public string Cell3 { get; set; } 

      public DataSourceProvider(string cell1, string cell2, string cell3) 
      { 
       Cell1 = cell1; 
       Cell2 = cell2; 
       Cell3 = cell3; 
      } 
     } 
    } 
} 

et côté client:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CrudGrid.ascx.cs" Inherits="Firelight.WebApp.WebControls.CrudGrid" %> 

<asp:UpdatePanel ID="GridPanel" UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
     <asp:ImageButton ID="GridInsert" ImageUrl="/images/crud/insert.png" runat="server" /> 

     <asp:GridView ID="Grid" GridLines="None" AllowPaging="true" PageSize="15" runat="server" 
      OnRowCommand="Grid_OnRowCommand" 
      OnRowDeleting="Grid_OnRowDeleting" 
     > 
      <Columns> 
       <asp:ButtonField CommandName="EditDialog" ButtonType="Image" ImageUrl="/images/crud/edit.png" HeaderImageUrl="/images/crud/edit.png" /> 
       <asp:ButtonField CommandName="Delete" ButtonType="Image" ImageUrl="/images/crud/delete.png" HeaderImageUrl="/images/crud/delete.png" /> 
      </Columns> 
     </asp:GridView> 
    </ContentTemplate> 
</asp:UpdatePanel> 

<asp:UpdatePanel ID="DetailsPanel" UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
     <asp:DetailsView ID="Details" GridLines="None" runat="server" 
     AutoGenerateRows="true" DefaultMode="ReadOnly" AllowPaging="false"> 
     </asp:DetailsView> 
    </ContentTemplate> 
</asp:UpdatePanel> 

cette « oeuvres »: je reçois une liste dans le detailsview les cellules j'énumérer CONSTRUIT manuellement dans une classe ...

ce que je veux vraiment quelque chose de similaire à

Details.DataSource = Grid.Rows[index] 

les champs et énumérant leurs noms, mais cela ne semblent fonctionner correctement non plus.

Avez-vous des suggestions ou des idées?

Ceci est pour un usercontrol, au cas où il changerait quelque chose. Pourquoi n'avez-vous pas simplement utilisé la méthode maître/détails pour le faire en utilisant l'élément griview comme paramètre de contrôle pour la vue détaillée?

Répondre

0

<asp:DetailsView AutoGenerateRows="False" DataKeyNames="au_id" DataSourceID="SqlDataSource3" 
     HeaderText="Author Details" ID="DetailsView1" runat="server" Width="275px"> 
     <Fields> 
      <asp:BoundField DataField="au_id" HeaderText="au_id" ReadOnly="True" SortExpression="au_id" /> 
      <asp:BoundField DataField="au_lname" HeaderText="au_lname" SortExpression="au_lname" /> 
        </Fields> 
     </asp:DetailsView> 
     <asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Pubs %>" ID="SqlDataSource3" 
     runat="server" SelectCommand="SELECT [au_id], [au_lname] FROM [authors] WHERE ([au_id] = @au_id)"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="GridView1" Name="au_id" PropertyName="SelectedValue" 
      Type="String" /> 
     </SelectParameters> 
     </asp:SqlDataSource> 

Quelque chose comme ceci: http://quickstarts.asp.net/QuickStartv20/util/srcview.aspx?path=~/aspnet/samples/data/GridViewMasterDetails.src