用户自定义控件中放gridview的问题

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

18 个解决方案

#1


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

#2


封装成自定义控件,并把绑定方法写在基类中,要用到的都继承这个基类,应该可行,没有试过,
期待更好的答案...

#3


请问下怎么加?有例子可以看么?

#4


请高手帮忙啊

#5


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

#6


UP。

#7


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

#8


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();
        }
        #endregion

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

#9


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


正解!

#10


UP

#11


up

#12


实现公用?

#13


学习

#14


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

Up

#15


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

楼主请参考

#16


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

#17


不妨先抛开ascx,说清楚当你每一个页面上都放置一个GridView之后,你是如何“控制其中gridview的显示字段”的,然后也就知道当把所做出的ascx来替换gridview之后,你的那种在每一个页面上看都很*的“控制显示字段”此时是否还能继续施展。

另外,不要太技术化,原来已经写好的页面不要轻易去修改,只有新的页面才一开始就用你的这个ascx。

#18


UP.

#1


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

#2


封装成自定义控件,并把绑定方法写在基类中,要用到的都继承这个基类,应该可行,没有试过,
期待更好的答案...

#3


请问下怎么加?有例子可以看么?

#4


请高手帮忙啊

#5


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

#6


UP。

#7


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

#8


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();
        }
        #endregion

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

#9


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


正解!

#10


UP

#11


up

#12


实现公用?

#13


学习

#14


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

Up

#15


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

楼主请参考

#16


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

#17


不妨先抛开ascx,说清楚当你每一个页面上都放置一个GridView之后,你是如何“控制其中gridview的显示字段”的,然后也就知道当把所做出的ascx来替换gridview之后,你的那种在每一个页面上看都很*的“控制显示字段”此时是否还能继续施展。

另外,不要太技术化,原来已经写好的页面不要轻易去修改,只有新的页面才一开始就用你的这个ascx。

#18


UP.