C#填充细节视图的不那么晦涩的方式?

C#填充细节视图的不那么晦涩的方式?,c#,asp.net,gridview,detailsview,C#,Asp.net,Gridview,Detailsview,我似乎无法将单个GridView的行正确绑定到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

我似乎无法将单个GridView的行正确绑定到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;
            }
        }
    }
}
和客户端:

<%@ 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>
枚举字段及其名称,但这似乎也不能正常工作

有什么建议或想法吗


这是针对用户控件的,以防它更改任何内容。

为什么不简单地使用master/details方法,使用griview项作为detailsview的控件参数来执行此操作

<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>

<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>