我在UserControl中放了一个gridview,现在的问题是,我怎么在外部调用这个UserControl控制其中gridview的显示字段,不然每个页面都要放一个gridview太麻烦了.谢谢大家

解决方案 »

  1.   

    加一个属性 把这个Gridview 露出来,这样就能用UserControl.Gridview访问Gridview了。
      

  2.   

    public GridView MyGridView
            {
                get { return GridView1; }
                set { GridView1 = value; }
            }
    在自定义控件后台代码中写个属性,在使用控件的页面的后台 用户控件ID.MyGridview来访问,
      

  3.   

    把绑定gridview的数据源设置成public,即可在每个页面访问
      

  4.   

    OrderDetail.ascx.cs:
    protected void Page_Load(object sender, EventArgs e)
            {
            }        private DataSet dsOrderDetail;
            public DataSet DSOrderDetail
            {
                get { return dsOrderDetail; }
                set { dsOrderDetail = value; }
            }        #region 获取订单清单
            public void BindOrderDetail()
            {
                GridView1.DataSource = DSOrderDetail;
                GridView1.DataBind();
            }
            #endregionOrderDetail.ascx:
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="OrderDetail.ascx.cs"
        Inherits="Web.Controls.OrderDetail" %>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" GridLines="Horizontal"
        OnRowDataBound="GridView1_RowDataBound" ShowFooter="True">
        <FooterStyle HorizontalAlign="Right" />
        <Columns>
            <asp:HyperLinkField DataNavigateUrlFields="ProductID" DataNavigateUrlFormatString="~/ShowProductDetail.aspx?ProductID={0}"
                DataTextField="ProductName" HeaderText="商品名称" NavigateUrl="~/ShowProductDetail.aspx"
                Target="productinfo">
                <HeaderStyle HorizontalAlign="Center" />
            </asp:HyperLinkField>
            <asp:BoundField DataField="OriginalPrice" DataFormatString="{0:c}" HeaderText="原价"
                HtmlEncode="False">
                <HeaderStyle HorizontalAlign="Center" />
            </asp:BoundField>
            <asp:BoundField DataField="SellPrice" DataFormatString="{0:c}" HeaderText="售价" HtmlEncode="False">
                <HeaderStyle HorizontalAlign="Center" />
            </asp:BoundField>
            <asp:TemplateField HeaderText="数量">
                <ItemTemplate>
                    <asp:Label ID="lblQuantity" runat="server" Text='<%#Eval("Quantity") %>'></asp:Label>
                </ItemTemplate>
                <FooterTemplate>
                    <span class="msg">
                        总数量:<asp:Label ID="lblSumQuantity" runat="server" Text="0"></asp:Label>&nbsp; 总价格:<asp:Label
                            ID="lblSumProductPrice" runat="server" Text="0.00"></asp:Label></span>
                </FooterTemplate>
                <ItemStyle HorizontalAlign="Center" />
            </asp:TemplateField>
            <asp:BoundField DataField="TotalSellPrice" HeaderText="总售价" HtmlEncode="False">
                <HeaderStyle HorizontalAlign="Center" />
            </asp:BoundField>
        </Columns>
    </asp:GridView>
      

  5.   

    这个问题最起码要考虑“在外部调用这个UserControl控制其中gridview的显示字段”这个问题的初衷是什么。最起码要想清楚这样做了之后要怎样设计才能达到最终目的。如果每一个页面放自己做出的ascx反倒比每一个放一个gridview还麻烦,足可以证明这个ascx最初的设计太想当然了。
      

  6.   

    不妨先抛开ascx,说清楚当你每一个页面上都放置一个GridView之后,你是如何“控制其中gridview的显示字段”的,然后也就知道当把所做出的ascx来替换gridview之后,你的那种在每一个页面上看都很自由的“控制显示字段”此时是否还能继续施展。另外,不要太技术化,原来已经写好的页面不要轻易去修改,只有新的页面才一开始就用你的这个ascx。