60分在线等,怎么给用户控件添加事件? 实际是这样的,我想写一个分页控件,有首页、尾页、上一页和下一页 四个Button,这个用户控件有一个自定义事件onPageChanging,可以在调用它的页面上使用。 不知道大家看明白没有,就是好像Button控件,是有Onclick事件, 当点击时触发这个事件, 我是想让这个用户控件也有个类似的事件,不知道怎么做 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己写个事件,然后在另一个事件添加此事件。例如: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自定义事件 } 哈哈 ,不久前写了一个分页控件 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"> 共<asp:Label ID="lTotalCount" runat="server" Text="0" Font-Bold="True" ForeColor="Red" Font-Size="12px"></asp:Label>条 共<asp:Label ID="lTotalPages" runat="server" Text="0" Font-Bold="True" ForeColor="Red" Font-Size="12px"></asp:Label>页 每页<asp:Label ID="lPageSize" runat="server" Text="5" Font-Bold="True" ForeColor="Red" Font-Size="12px"></asp:Label>条 当前第<asp:Label ID="lCurrentPage" runat="server" Text="1" Style="color: #FF3300; font-weight: 700" Font-Bold="True" Font-Size="12px"></asp:Label>页 <asp:Button ID="btFirst" runat="server" Text="首页" CommandName="first" OnCommand="PaggingButton_Onclick" Width="61px" /> <asp:Button ID="btPrevious" runat="server" Text="前页" CommandName="previous" OnCommand="PaggingButton_Onclick" Width="61px" /> <asp:Button ID="btNext" runat="server" Text="后页" CommandName="next" OnCommand="PaggingButton_Onclick" Width="61px" /> <asp:Button ID="btLast" runat="server" Text="末页" CommandName="last" OnCommand="PaggingButton_Onclick" Width="61px" /> 跳到<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" /> </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(); } 调用分页控件:把控件拖到页面即可,后台调用代码: 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(); } } 调用的分页控件ID是:PagerBar1protected void btnSearch_Click(object sender, EventArgs e) 为页面的搜索功能 先定义个委托和事件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);就可以完成了。祝你好运! //这个是对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()"); 还有一个方法补上: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();; //关闭数据库连接 } } 貌似web分页有很多源代码,如果是winform的话,只要实现上一页,下一页等按钮的事件 实现即可。 看aspnetpager控件public event EventHanlder PageChanged{add{Events.AddHandler(EventPageChange,value);}remove{Events.RemoveHanlder(EventPageChange,value);}}PUBLIC void OnPageChanged(EventArge e){} 非常感谢各位的帮助,尤其感谢LXH060204童鞋,结贴散分。 论坛小问题。。。急!! c#编写dll问题 字符串反向搜索 C# SerialPort串口通讯程序总是卡死 gridview 局部刷新 Word文档导出图片 存储过程问题 大家关注一下!!!!!!!!就50分了 在C#中怎样将展开的treeview节点关闭 C#怎样将数据集转换成xml文件,谢~ 表格的正则 C# 安装部署 断点调试问题! 怎样可以dataGridView的第一列中显示这一行是第几条记录?
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自定义事件
}
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">
共<asp:Label ID="lTotalCount" runat="server" Text="0" Font-Bold="True" ForeColor="Red"
Font-Size="12px"></asp:Label>条 共<asp:Label ID="lTotalPages" runat="server"
Text="0" Font-Bold="True" ForeColor="Red" Font-Size="12px"></asp:Label>页 每页<asp:Label
ID="lPageSize" runat="server" Text="5" Font-Bold="True" ForeColor="Red" Font-Size="12px"></asp:Label>条 当前第<asp:Label
ID="lCurrentPage" runat="server" Text="1" Style="color: #FF3300; font-weight: 700"
Font-Bold="True" Font-Size="12px"></asp:Label>页
<asp:Button ID="btFirst" runat="server" Text="首页" CommandName="first" OnCommand="PaggingButton_Onclick"
Width="61px" />
<asp:Button ID="btPrevious" runat="server" Text="前页" CommandName="previous"
OnCommand="PaggingButton_Onclick" Width="61px" />
<asp:Button ID="btNext" runat="server" Text="后页" CommandName="next" OnCommand="PaggingButton_Onclick"
Width="61px" />
<asp:Button ID="btLast" runat="server" Text="末页" CommandName="last" OnCommand="PaggingButton_Onclick"
Width="61px" /> 跳到<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" />
</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();
}
把控件拖到页面即可,后台调用代码: 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();
}
}
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);
就可以完成了。祝你好运!
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()");
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();; //关闭数据库连接 }
}
只要实现上一页,下一页等按钮的事件 实现即可。
public event EventHanlder PageChanged
{
add{Events.AddHandler(EventPageChange,value);
}
remove
{Events.RemoveHanlder(EventPageChange,value);}
}
PUBLIC void OnPageChanged(EventArge e)
{
}