用自定义web控件(.ascx)做就比较简单

解决方案 »

  1.   

    有例子吗,老大,刚接触.net不会写啊
      

  2.   

    将子Datagrid(dg)的换页事件委托给myPageIndexChanged过程dg.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.myPageIndexChanged);
    private void myPageIndexChanged(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
                       dg.CurrentPageIndex = e.NewPageIndex;
    //分页代码


    }
      

  3.   

    penning(飞鱼) 大哥,dg.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.myPageIndexChanged);
    这句是不是写在InitializeComponent()里啊,可编译时不认识  dg 啊,我用FindControl("DataGrid1")也找不到啊
      

  4.   

    首先做一个mygrid.ascs,里面就放一个DataGrid,
    提供一个方法loaddata(string id),功能是根据主表的一个id读从表并且绑定,这个id用viewstate保存起来,那么就可以写它自己的翻页的事件了;在主页面DataGrid的itemDataBound事件里:
    if(e.Item.ItemIndex>-1)
    {
       mygrid tmpGrid = e.Item.FincControl("mygrid1");
       string id = e.Item.Cells[0].Text;
       tmpGrid.loaddata(id);
    }
    主页面完全可以不管子表的翻页问题了
      

  5.   

    http://community.csdn.net/Expert/topic/3393/3393714.xml?temp=.4214746
      

  6.   

    Eddie005(暴走005) 老大,我照你的方法试了一下
    ‘ mygrid tmpGrid = e.Item.FindControl("mygrid1");
       string id = e.Item.Cells[0].Text;
       tmpGrid.loaddata(id);
    ,可是运行时报错,说对象未实例化,我想可能是e.Item.FindControl("mygrid1");没找到控件把,
    我确定"mygrid1"是没错的,再帮我看看好吗?
      

  7.   

    if(e.Item.ItemIndex>-1)
    {
    mygrid tmpGrid = (mygrid)e.Item.FindControl("mygrid1");
      

  8.   

    Eddie005(暴走005) 大哥,我照你的方法再试了,可还是不行,一样报未实例化,请大哥能不能给个完整的实例啊,小弟在这跪谢了 
      

  9.   

    <%@ Register TagPrefix="uc1" TagName="mygrid" Src="mygrid.ascx" %>
    这个别忘了,要加
      

  10.   

    -------
    可编译时不认识  dg 啊
    -------
    你必须自已在cs中声明dg
      

  11.   

    完整的例子:
    ◆MyGrid.ascx:
    <%@ Control Language="c#" AutoEventWireup="false" Codebehind="MyGrid.ascx.cs" Inherits="XsStudio.test.MyGrid" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
    <asp:DataGrid id="DataGrid1" runat="server" ShowHeader="False" AllowPaging="True" PageSize="3"></asp:DataGrid>
     
    ◆MyGrid.ascx.cs
    namespace test
    {
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls; /// <summary>
    /// MyGrid 的摘要说明。
    /// </summary>
    public class MyGrid : System.Web.UI.UserControl
    {
    protected System.Web.UI.WebControls.DataGrid DataGrid1; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    } public void loaddata(string id)
    {
    DataTable dt = new DataTable();
    dt.Columns.Add("SN");
    dt.Columns[0].AutoIncrementSeed=1;
    dt.Columns[0].AutoIncrement = true;
    dt.Columns.Add("AAA");
    dt.Columns.Add("BBB");
    dt.Columns.Add("CCC");
    dt.Rows.Add(new string[]{"1",id,"435689",System.DateTime.Now.ToString()});
    dt.Rows.Add(new string[]{"2",id,"34535",System.DateTime.Now.ToString()});
    dt.Rows.Add(new string[]{"3",id,"4456",System.DateTime.Now.ToString()});
    dt.Rows.Add(new string[]{"4",id,"64563",System.DateTime.Now.ToString()});
    dt.Rows.Add(new string[]{"5",id,"84535",System.DateTime.Now.ToString()});
    this.DataGrid1.DataSource = dt;
    this.DataGrid1.DataBind();
    ViewState[this.ClientID+"_id"] = id;
    } private void DataGrid1_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
    this.DataGrid1.CurrentPageIndex = e.NewPageIndex;
    loaddata(ViewState[this.ClientID+"_id"].ToString());
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器
    /// 修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.Load += new System.EventHandler(this.Page_Load);
    this.DataGrid1.PageIndexChanged+=new DataGridPageChangedEventHandler(DataGrid1_PageIndexChanged);
    }
    #endregion
    }
    }◆webform1.aspx:
    <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="XsStudio.test.WebForm1" validateRequest=false%>
    <%@ Register TagPrefix="uc1" TagName="MyGrid" Src="MyGrid.ascx" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm1</title>
    <META http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body bgColor="#cccccc" MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <asp:DataList id="DataList1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server">
    <ItemTemplate>
    <asp:TextBox id="TextBox1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ID") %>'></asp:TextBox>
    <asp:TextBox id="Textbox2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "smallPicPath") %>'></asp:TextBox>
    <uc1:MyGrid id="MyGrid1" runat="server"></uc1:MyGrid><br>
    </ItemTemplate>
    </asp:DataList>
    </form>
    <script language="javascript">

    </script>
    </body>
    </HTML>◆webform1.aspx.cs:using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using Microsoft.Web.UI.WebControls;
    using System.Data.OleDb;namespace XsStudio.test
    {

    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Web.UI.HtmlControls.HtmlInputText Text1;
    protected System.Web.UI.WebControls.DataList DataList1;
    protected System.Web.UI.WebControls.RadioButtonList RadioButtonList1;




    private void Page_Load(object sender, System.EventArgs e)
    { // 在此处放置用户代码以初始化页面
    if(!IsPostBack)
    {
    DataTable tb = new DataTable();
    tb.Columns.Add("ID");
    tb.Columns.Add("smallPicPath");
    tb.Columns.Add("Re");
    tb.Columns.Add("Name");
    tb.Columns.Add("SupportCount");
    tb.Columns.Add("gdzs");
    tb.Columns.Add("BrowserCount");
    tb.Rows.Add(new string[]{"001","dwef321","weaf","ewfa","1","12","ewf"});
    tb.Rows.Add(new string[]{"002","geawef","gaweg","43ga4","1","21","weg"});
    tb.Rows.Add(new string[]{"003","berg","gaweg","43ga4","1","21","weg"});
    tb.Rows.Add(new string[]{"004","54wh","gaweg","43ga4","1","21","weg"});
    tb.Rows.Add(new string[]{"005","baerg","gaweg","43ga4","1","21","weg"});


    DataList1.DataSource = tb;
    DataList1.DataBind();
    }

    }
    private void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
    {
    if(e.Item.ItemIndex>-1)
    {
    string id = ((TextBox)e.Item.FindControl("TextBox1")).Text;
    MyGrid tmpGrid = (MyGrid)e.Item.FindControl("MyGrid1");
    tmpGrid.loaddata(id);
    }
    } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Load += new System.EventHandler(this.Page_Load);
    this.DataList1.ItemDataBound+=new DataListItemEventHandler(DataList1_ItemDataBound);
    } #endregion }
    }
      

  12.   

    搞定了,谢谢各位大哥,特别感谢Eddie005(暴走005)大哥