实际是这样的,我想写一个分页控件,有首页、尾页、上一页和下一页 四个Button,这个用户控件有一个自定义事件onPageChanging,可以在调用它的页面上使用。 不知道大家看明白没有,就是好像Button控件,是有Onclick事件, 当点击时触发这个事件,   我是想让这个用户控件也有个类似的事件,不知道怎么做

解决方案 »

  1.   

    自己写个事件,然后在另一个事件添加此事件。例如:
    private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
            {
              ......ComboBox自定义事件
            }
    private void dgvChangeLogTableMain_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
    ((System.Windows.Forms.ComboBox)e.Control).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);//添加ComboBox自定义事件
            }
      

  2.   

    哈哈 ,不久前写了一个分页控件 PagerBar.ascx:
    PagerBar.ascx 代码:<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PagerBar.ascx.cs" Inherits="分页自定义控件_PagerBar" %>
    <table cellpadding="3" cellspacing="0" style="background: #D2E5F8; font-size: 12px;
        border: solid 1px green;">
        <tr>
            <td valign="bottom">
                &nbsp; 共<asp:Label ID="lTotalCount" runat="server" Text="0" Font-Bold="True" ForeColor="Red"
                    Font-Size="12px"></asp:Label>条&nbsp;&nbsp;共<asp:Label ID="lTotalPages" runat="server"
                        Text="0" Font-Bold="True" ForeColor="Red" Font-Size="12px"></asp:Label>页&nbsp;&nbsp;每页<asp:Label
                            ID="lPageSize" runat="server" Text="5" Font-Bold="True" ForeColor="Red" Font-Size="12px"></asp:Label>条&nbsp;&nbsp;当前第<asp:Label
                                ID="lCurrentPage" runat="server" Text="1" Style="color: #FF3300; font-weight: 700"
                                Font-Bold="True" Font-Size="12px"></asp:Label>页&nbsp;&nbsp;&nbsp;
                &nbsp;
                <asp:Button ID="btFirst" runat="server" Text="首页" CommandName="first" OnCommand="PaggingButton_Onclick"
                    Width="61px" />
                &nbsp;<asp:Button ID="btPrevious" runat="server" Text="前页" CommandName="previous"
                    OnCommand="PaggingButton_Onclick" Width="61px" />
                &nbsp;<asp:Button ID="btNext" runat="server" Text="后页" CommandName="next" OnCommand="PaggingButton_Onclick"
                    Width="61px" />
                &nbsp;<asp:Button ID="btLast" runat="server" Text="末页" CommandName="last" OnCommand="PaggingButton_Onclick"
                    Width="61px" />&nbsp;&nbsp;&nbsp; 跳到<asp:TextBox ID="txtPage" runat="server" Font-Size="12px"
                        Width="31px"></asp:TextBox>页<asp:Button ID="btngo" runat="server" CommandName="go"
                            Font-Size="12px" OnCommand="PaggingButton_Onclick" Text="GO" Width="40px" />
                &nbsp;
            </td>
        </tr>
    </table>
    后台代码PagerBar.ascx :    public event EventHandler DataBind = null;    protected void Page_Load(object sender, EventArgs e)
        {    }    //记录总数
        public int TotalCount
        {
            get { return Convert.ToInt32(lTotalCount.Text.Trim()); }
            set { lTotalCount.Text = value.ToString(); }
        }    //总页数
        public int TotalPages
        {
            get { return Convert.ToInt32(lTotalPages.Text.Trim()); }
            set
            {
                if (value <= 1)
                {
                    //如果没有记录就 隐藏翻页控件
                    btFirst.Enabled = false;
                    btLast.Enabled = false;
                    btPrevious.Enabled = false;
                    btNext.Enabled = false;
                    btngo.Enabled = false;
                }
                else
                {
                    btFirst.Enabled = true;
                    btLast.Enabled = true;
                    btPrevious.Enabled = true;
                    btNext.Enabled = true;
                    btngo.Enabled = true;
                }            if (CurrentPageNo == 1)//第一页
                {
                    btFirst.Enabled = false;
                    btPrevious.Enabled = false;
                }
                if (CurrentPageNo == value) //最后一页
                {
                    btNext.Enabled = false;
                    btLast.Enabled = false;
                }
                lTotalPages.Text = value.ToString();
            }
        }    //当前页
        public int CurrentPageNo
        {
            get { return Convert.ToInt32(lCurrentPage.Text.Trim()); }
            set { lCurrentPage.Text = value.ToString(); }
        }    //分页数
        public int PageSize
        {
            get { return Convert.ToInt32(lPageSize.Text.Trim()); }
            set { lPageSize.Text = value.ToString(); }
        }    //查询语句
        public string SelectCommand
        {
            get { return ViewState["sql"].ToString(); }
            set { ViewState["sql"] = value; }
        }    //记录集
        private DataTable _datasource;
        public DataTable DataTableResult
        {
            get { return _datasource; }
        }    //获取数据
        public void GetData()
        {
            int pc = 0;
            int rc = 0;        this._datasource = SqlHelper.PaggingDataSource(this.SelectCommand, this.CurrentPageNo, PageSize, ref pc, ref rc);
            this.TotalPages = pc;
            this.TotalCount = rc;        if (_datasource != null)
            {
                DataBind(null, null);
            }    }    public void PaggingButton_Onclick(object sender, CommandEventArgs e)
        {
            switch (e.CommandName)
            {
                case "first":
                    this.CurrentPageNo = 1;
                    break;
                case "previous":
                    this.CurrentPageNo--;
                    if (this.CurrentPageNo < 1)
                        this.CurrentPageNo = 1;
                    break;
                case "next":
                    this.CurrentPageNo++;
                    if (this.CurrentPageNo > this.TotalPages) this.CurrentPageNo = this.TotalPages;
                    break;
                case "last":
                    this.CurrentPageNo = this.TotalPages;
                    break;
                case "go":
                    bool b = true;
                    try
                    {
                        int i = Convert.ToInt32(txtPage.Text.Trim());
                        b = true;
                    }
                    catch
                    {
                        b = false;
                    }
                    if (b == true)
                    {
                        int cP = Convert.ToInt32(txtPage.Text.Trim());
                        if (cP > this.TotalPages || cP < 1)
                        {
                            Response.Write("<script>alert('页码有误!!')</script>");
                        }
                        else
                        {
                            this.CurrentPageNo = Convert.ToInt32(txtPage.Text.Trim());
                        }
                    }                break;
            }        GetData();
        }
      

  3.   

    调用分页控件:
    把控件拖到页面即可,后台调用代码:    protected void Page_Load(object sender, EventArgs e)
        {
            PagerBar1.DataBind += new EventHandler(PagerBar1_DataBind);//订阅分页控件中的翻页事件
            if (!IsPostBack)
            {
                PagerBar1.PageSize = 2; //分页数
                PagerBar1.CurrentPageNo = 1; //当前页
                PagerBar1.SelectCommand = "select * from users";
                PagerBar1.GetData();        }
        }    void PagerBar1_DataBind(object sender, EventArgs e)
        {
            GridView1.DataSource = PagerBar1.DataTableResult;
            GridView1.DataBind();
        }
        protected void btnSearch_Click(object sender, EventArgs e)
        {
            PagerBar1.SelectCommand = "";
            PagerBar1.SelectCommand = "select * from users where uname like '%" + txtName.Text.Trim() + "%'";
            PagerBar1.GetData();
            PagerBar1.CurrentPageNo = 1; //当前页
        }    //在填充分页中 排序的另一种方法
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.FindControl("lblSort") !=null)
            {
                Label Sortid = e.Row.FindControl("lblSort") as Label;
                int s = PagerBar1.PageSize * (PagerBar1.CurrentPageNo-1) + e.Row.RowIndex + 1;
                Sortid.Text = s.ToString();
            }
        }
      

  4.   

    调用的分页控件ID是:PagerBar1protected void btnSearch_Click(object sender, EventArgs e) 为页面的搜索功能
      

  5.   

    先定义个委托和事件
    public delegate void onClick(string StrMachineCode);
    public event onClick picClick;
    然后在你想要实现的事件里面去调用上面定义的事件。
    private void button1_Click(object sender, EventArgs e)
    {
           if(this.picClick!=null)
           this.picClick(StrMachineCode);
    }调用的时候,直接在
    object.picClick += new object.onClick(object_picClick);
    就可以完成了。祝你好运!
      

  6.   

    //这个是对ComboBox控件(DataGridView中的ComboBox)自定义事件
    private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
      {
      ......
      }
    //在DataGridView的DataGridView_EditingControlShowing事件中添加上面ComboBox控件自定义的事件
    private void DataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
      {
    ((System.Windows.Forms.ComboBox)e.Control).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);//添加ComboBox自定义事件
      }不知道是不是你想要的,
    asp.net的话可以在后台Page_Load里给控件添加事件
    btn.Attributes.Add("onclick","onclick()");
      

  7.   

    还有一个方法补上:
    SqlHelper.PaggingDataSource(...)
        /// <summary>
        /// 获取分页数据源
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="startCount"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public static DataTable PaggingDataSource(string sql, int currentPage, int pageSize, ref int pageCount, ref int resourtCount)
        {
            SqlConnection conn = new SqlConnection(dbTestConn);
            SqlCommand command = new SqlCommand();
            command.Connection = conn;        //查询数据
            command.CommandText = sql;
            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = command;
            DataTable dt = new DataTable();
            DataTable dtCount = new DataTable();
            try
            {
                adapter.Fill(dtCount); //记录总数
                resourtCount = dtCount.Rows.Count > 0 ? dtCount.Rows.Count : 0;            int begin = (currentPage - 1) * pageSize; //当前记录索引(每页的第一个记录的索引)
                adapter.Fill(begin, pageSize, dt);            //计算总页数
                pageCount = resourtCount == 0 ? 1 : (int)Math.Ceiling((double)resourtCount / pageSize);
                return dt;        }
            catch (SqlException ex)
            {
                //_Message = ex.Message;
                return null;
            }
            finally
            {
                conn.Close();; //关闭数据库连接        }
        }
      

  8.   

    貌似web分页有很多源代码,如果是winform的话,
    只要实现上一页,下一页等按钮的事件 实现即可。
      

  9.   

    看aspnetpager控件
    public event EventHanlder PageChanged
    {
    add{Events.AddHandler(EventPageChange,value);
    }
    remove
    {Events.RemoveHanlder(EventPageChange,value);}
    }
    PUBLIC void OnPageChanged(EventArge e)
    {
    }
      

  10.   

    非常感谢各位的帮助,尤其感谢LXH060204童鞋,结贴散分。