我想做一个user contorl,包括datagrid 和几个button,请问应如何下手,有相关的例子吗?? http://chs.gotdotnet.com/quickstart/aspplus/doc/webpagelets.aspx 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是我做的一个自定义控件<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.116, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %><%@ Control Language="c#" AutoEventWireup="false" Codebehind="UC_MaterielTree.ascx.cs" Inherits="ToyoInk.ToyoInkControl.UC_MaterielTree" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%><table> <tr vAlign="top"> <td>物料分类</td> <td>物料名称</td> <td><asp:textbox id="TB_MaterielName" Runat="server"></asp:textbox></td> <td>物料编码</td> <td><asp:textbox id="TB_MaterielSerial" Runat="server"></asp:textbox></td> <td><asp:button id="Btn_Search" Runat="server" Text="查找"></asp:button></td> </tr> <tr vAlign="top"> <td><iewc:treeview id="TreeView1" runat="server"> <iewc:TreeNode NodeData="" Text="所有物料"></iewc:TreeNode> </iewc:treeview></td> <td colSpan="5"><asp:datagrid id="DataGrid1" Runat="server" DataKeyField="FMaterielID" AutoGenerateColumns="False" AllowPaging="True" PagerStyle-HorizontalAlign="Right" PagerStyle-Mode="NumericPages" Width="450px"> <ItemStyle ForeColor="Navy" BackColor="Lavender"></ItemStyle> <HeaderStyle ForeColor="White" BackColor="Navy"></HeaderStyle> <Columns> <asp:TemplateColumn HeaderText="物料名称"></asp:TemplateColumn> <asp:TemplateColumn HeaderText="物料编号"></asp:TemplateColumn> <asp:TemplateColumn HeaderText="物料规格"></asp:TemplateColumn> <asp:ButtonColumn Text="Add" HeaderText="Add" CommandName="Selected"></asp:ButtonColumn> </Columns> <PagerStyle HorizontalAlign="Right" ForeColor="Maroon" BackColor="#E0E0E0" Mode="NumericPages"></PagerStyle> </asp:datagrid></td> </tr></table> --------------codenamespace ToyoInk.ToyoInkControl{ using System; using System.Data; using System.Drawing; using System.Web; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; /// <summary> /// UC_MaterielTree 的摘要说明。 /// </summary> /// public class MaterielSelectedEvent:System.EventArgs { //private int _MaterielID; //private string _MaterielName; //private string _MaterielSerial; //private public ToyoInkClass.MaterielDetail MaterielInfo; public MaterielSelectedEvent(ToyoInkClass.MaterielDetail md){ MaterielInfo=new ToyoInkClass.MaterielDetail(md.MaterielID,md.MaterielName,md.MaterielSerial,md.Amount,md.Standart,md.BaseAmount,md.Price,md.CurrencyName); } } public delegate void MaterielSelectedEventHandler(object sender,MaterielSelectedEvent e); public abstract class UC_MaterielTree : System.Web.UI.UserControl { public event MaterielSelectedEventHandler MaterielSelected; protected System.Web.UI.WebControls.DataGrid DataGrid1; protected System.Web.UI.WebControls.TextBox TB_MaterielName; protected System.Web.UI.WebControls.TextBox TB_MaterielSerial; protected System.Web.UI.WebControls.Button Btn_Search; protected Microsoft.Web.UI.WebControls.TreeView TreeView1; protected virtual void OnMaterielSelected(MaterielSelectedEvent e){ if(MaterielSelected!=null) MaterielSelected(this,e); } private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 try{ if(!Page.IsPostBack) { this.BindMaterielTree(); this.BindGrid(); } } catch(Exception excep) { Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message)); } } private void BindGrid(){ try { string strMaterielClass=this.TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex).NodeData; string strMaterielName=this.TB_MaterielName.Text.Trim(); string strMaterielSerial=this.TB_MaterielSerial.Text.Trim(); System.Data.SqlClient.SqlConnection sqlConn=new System.Data.SqlClient.SqlConnection(); sqlConn.ConnectionString=ToyoInkClass.Database.strConnectString; System.Data.SqlClient.SqlCommand sqlCmd=new System.Data.SqlClient.SqlCommand(); sqlCmd.Connection=sqlConn; sqlCmd.CommandType=CommandType.StoredProcedure; sqlCmd.CommandText="sp_SelectMateriel"; sqlCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@FMaterielClassSerial",SqlDbType.NVarChar,255)); sqlCmd.Parameters["@FMaterielClassSerial"].Value=strMaterielClass; sqlCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@FMaterielName",SqlDbType.NVarChar,50)); sqlCmd.Parameters["@FMaterielName"].Value=strMaterielName; sqlCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@FMaterielSerial",SqlDbType.NVarChar,50)); sqlCmd.Parameters["@FMaterielSerial"].Value=strMaterielSerial; System.Data.SqlClient.SqlDataAdapter sqlAdap=new System.Data.SqlClient.SqlDataAdapter(sqlCmd); System.Data.DataSet ds=new System.Data.DataSet(); sqlConn.Open(); try{ sqlAdap.Fill(ds); int intPageCount=(ds.Tables[0].Rows.Count-1)/this.DataGrid1.PageSize; if(this.DataGrid1.CurrentPageIndex>intPageCount)this.DataGrid1.CurrentPageIndex=intPageCount>0?intPageCount:0; //System.Data.DataView dv=ds.Tables[0].DefaultView; this.DataGrid1.DataSource=ds.Tables[0].DefaultView; this.DataGrid1.DataBind(); } finally{ sqlConn.Close(); } } catch{ throw; } } private Microsoft.Web.UI.WebControls.TreeNodeCollection FindParentNodeCollection(Microsoft.Web.UI.WebControls.TreeNode tn,string strSerial) { //如果是父节点或根节点,则返回 //反之递归直到找到父节点或根节点止 try { if(tn.NodeData==strSerial.Substring(0,strSerial.Length-4) || (tn.Parent is Microsoft.Web.UI.WebControls.TreeView)) { return tn.Nodes; } else { Microsoft.Web.UI.WebControls.TreeNode ttn=(Microsoft.Web.UI.WebControls.TreeNode)tn.Parent; return FindParentNodeCollection(ttn,strSerial); } } catch(Exception excep) { throw(excep); } } private void BindMaterielTree(){ try { System.Data.SqlClient.SqlDataReader sdr=ToyoInkClass.Database.ExecuteReader(CommandType.StoredProcedure,"sp_SelectMaterielclass",null); Microsoft.Web.UI.WebControls.TreeNodeCollection pn=this.TreeView1.Nodes; Microsoft.Web.UI.WebControls.TreeNode oldtn=this.TreeView1.Nodes[0]; Microsoft.Web.UI.WebControls.TreeNode tn; string strChild; string strMaterielClassName; while(sdr.Read()){ tn=new Microsoft.Web.UI.WebControls.TreeNode(); strChild=sdr["FMaterialClassSerial"].ToString(); strMaterielClassName=sdr["FMaterielClassName"].ToString(); tn.NodeData=strChild; tn.Text=strMaterielClassName; pn=FindParentNodeCollection(oldtn,strChild); pn.Add(tn); oldtn=tn; } } catch(Exception excep){ Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message)); } } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// 设计器支持所需的方法 - 不要使用 /// 代码编辑器修改此方法的内容。 /// </summary> private void InitializeComponent() { this.Btn_Search.Click += new System.EventHandler(this.Btn_Search_Click); this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand); this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged); this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Btn_Search_Click(object sender, System.EventArgs e) { try { this.BindGrid(); } catch(Exception excep) { Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message)); } } private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) { try { this.DataGrid1.CurrentPageIndex=e.NewPageIndex; this.BindGrid(); } catch(Exception excep) { Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message)); } } private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { try { if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem) { e.Item.Cells[0].Text=((DataRowView)e.Item.DataItem)["FMaterielName"].ToString(); e.Item.Cells[1].Text=((DataRowView)e.Item.DataItem)["FMaterielSerial"].ToString(); e.Item.Cells[2].Text=((DataRowView)e.Item.DataItem)["FStandart"].ToString()+"公斤/"+((DataRowView)e.Item.DataItem)["FMaterialUnitName"].ToString(); } } catch(Exception excep) { Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message)); } } private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { try { if(e.CommandName=="Selected"){ int intIndex=e.Item.ItemIndex; int MaterielID=(int)this.DataGrid1.DataKeys[intIndex]; string MaterielName=e.Item.Cells[0].Text; string MaterielSeriel=e.Item.Cells[1].Text; string MaterielStandart=e.Item.Cells[2].Text; //decimal MaterielPrice=(decimal)((DataRowView)e.Item.DataItem)["FLastPrice"]; ToyoInkClass.MaterielDetail md=new ToyoInkClass.MaterielDetail(MaterielID,MaterielName,MaterielSeriel,0m,MaterielStandart,0m,0m,"RMB"); OnMaterielSelected(new MaterielSelectedEvent(md)); } } catch(Exception excep) { Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message)); } } }}与你说的可能基本类似吧 枚举,文件的创建过程 怎么在一个页面上打开新窗口之后对原来的父窗口进行操作 重载了这两个方法后,页面中所有控件的事件怎么都不执行了呀 问个初级问题:ASP。NET中 如何保存用户信息? 怎么给客户端传一个二进制流 【petshop的simpepager问题】 一头雾水,哪位大虾能说明一下它实现的原理,或介绍相关的文章 session.abandon方法失效? 如何通过程序控制DATAGRID的列宽 怎样可以控制title出现的时间,我想鼠标一放上去就显示行不行 xml文件如何删除? 如何在第二个页面得到第一个页面的参数 asp.net如何刷新框架中的另一个网页,急,在线等
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.116, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="UC_MaterielTree.ascx.cs" Inherits="ToyoInk.ToyoInkControl.UC_MaterielTree" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<table>
<tr vAlign="top">
<td>物料分类</td>
<td>物料名称</td>
<td><asp:textbox id="TB_MaterielName" Runat="server"></asp:textbox></td>
<td>物料编码</td>
<td><asp:textbox id="TB_MaterielSerial" Runat="server"></asp:textbox></td>
<td><asp:button id="Btn_Search" Runat="server" Text="查找"></asp:button></td>
</tr>
<tr vAlign="top">
<td><iewc:treeview id="TreeView1" runat="server">
<iewc:TreeNode NodeData="" Text="所有物料"></iewc:TreeNode>
</iewc:treeview></td>
<td colSpan="5"><asp:datagrid id="DataGrid1" Runat="server" DataKeyField="FMaterielID" AutoGenerateColumns="False" AllowPaging="True" PagerStyle-HorizontalAlign="Right" PagerStyle-Mode="NumericPages" Width="450px">
<ItemStyle ForeColor="Navy" BackColor="Lavender"></ItemStyle>
<HeaderStyle ForeColor="White" BackColor="Navy"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="物料名称"></asp:TemplateColumn>
<asp:TemplateColumn HeaderText="物料编号"></asp:TemplateColumn>
<asp:TemplateColumn HeaderText="物料规格"></asp:TemplateColumn>
<asp:ButtonColumn Text="Add" HeaderText="Add" CommandName="Selected"></asp:ButtonColumn>
</Columns>
<PagerStyle HorizontalAlign="Right" ForeColor="Maroon" BackColor="#E0E0E0" Mode="NumericPages"></PagerStyle>
</asp:datagrid></td>
</tr>
</table>
namespace ToyoInk.ToyoInkControl
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls; /// <summary>
/// UC_MaterielTree 的摘要说明。
/// </summary>
/// public class MaterielSelectedEvent:System.EventArgs
{
//private int _MaterielID;
//private string _MaterielName;
//private string _MaterielSerial;
//private
public ToyoInkClass.MaterielDetail MaterielInfo;
public MaterielSelectedEvent(ToyoInkClass.MaterielDetail md){
MaterielInfo=new ToyoInkClass.MaterielDetail(md.MaterielID,md.MaterielName,md.MaterielSerial,md.Amount,md.Standart,md.BaseAmount,md.Price,md.CurrencyName);
}
}
public delegate void MaterielSelectedEventHandler(object sender,MaterielSelectedEvent e); public abstract class UC_MaterielTree : System.Web.UI.UserControl
{
public event MaterielSelectedEventHandler MaterielSelected;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Web.UI.WebControls.TextBox TB_MaterielName;
protected System.Web.UI.WebControls.TextBox TB_MaterielSerial;
protected System.Web.UI.WebControls.Button Btn_Search;
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
protected virtual void OnMaterielSelected(MaterielSelectedEvent e){
if(MaterielSelected!=null)
MaterielSelected(this,e);
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
try{
if(!Page.IsPostBack)
{
this.BindMaterielTree();
this.BindGrid();
}
}
catch(Exception excep)
{
Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message));
}
} private void BindGrid(){
try
{
string strMaterielClass=this.TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex).NodeData;
string strMaterielName=this.TB_MaterielName.Text.Trim();
string strMaterielSerial=this.TB_MaterielSerial.Text.Trim(); System.Data.SqlClient.SqlConnection sqlConn=new System.Data.SqlClient.SqlConnection();
sqlConn.ConnectionString=ToyoInkClass.Database.strConnectString; System.Data.SqlClient.SqlCommand sqlCmd=new System.Data.SqlClient.SqlCommand();
sqlCmd.Connection=sqlConn;
sqlCmd.CommandType=CommandType.StoredProcedure;
sqlCmd.CommandText="sp_SelectMateriel";
sqlCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@FMaterielClassSerial",SqlDbType.NVarChar,255));
sqlCmd.Parameters["@FMaterielClassSerial"].Value=strMaterielClass;
sqlCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@FMaterielName",SqlDbType.NVarChar,50));
sqlCmd.Parameters["@FMaterielName"].Value=strMaterielName;
sqlCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@FMaterielSerial",SqlDbType.NVarChar,50));
sqlCmd.Parameters["@FMaterielSerial"].Value=strMaterielSerial; System.Data.SqlClient.SqlDataAdapter sqlAdap=new System.Data.SqlClient.SqlDataAdapter(sqlCmd);
System.Data.DataSet ds=new System.Data.DataSet();
sqlConn.Open();
try{
sqlAdap.Fill(ds);
int intPageCount=(ds.Tables[0].Rows.Count-1)/this.DataGrid1.PageSize;
if(this.DataGrid1.CurrentPageIndex>intPageCount)this.DataGrid1.CurrentPageIndex=intPageCount>0?intPageCount:0; //System.Data.DataView dv=ds.Tables[0].DefaultView;
this.DataGrid1.DataSource=ds.Tables[0].DefaultView;
this.DataGrid1.DataBind(); }
finally{
sqlConn.Close();
}
}
catch{
throw;
}
}
{
//如果是父节点或根节点,则返回
//反之递归直到找到父节点或根节点止
try
{
if(tn.NodeData==strSerial.Substring(0,strSerial.Length-4) || (tn.Parent is Microsoft.Web.UI.WebControls.TreeView))
{
return tn.Nodes;
}
else
{
Microsoft.Web.UI.WebControls.TreeNode ttn=(Microsoft.Web.UI.WebControls.TreeNode)tn.Parent;
return FindParentNodeCollection(ttn,strSerial);
}
}
catch(Exception excep)
{
throw(excep);
}
} private void BindMaterielTree(){
try
{
System.Data.SqlClient.SqlDataReader sdr=ToyoInkClass.Database.ExecuteReader(CommandType.StoredProcedure,"sp_SelectMaterielclass",null);
Microsoft.Web.UI.WebControls.TreeNodeCollection pn=this.TreeView1.Nodes;
Microsoft.Web.UI.WebControls.TreeNode oldtn=this.TreeView1.Nodes[0];
Microsoft.Web.UI.WebControls.TreeNode tn;
string strChild;
string strMaterielClassName; while(sdr.Read()){
tn=new Microsoft.Web.UI.WebControls.TreeNode();
strChild=sdr["FMaterialClassSerial"].ToString();
strMaterielClassName=sdr["FMaterielClassName"].ToString();
tn.NodeData=strChild;
tn.Text=strMaterielClassName;
pn=FindParentNodeCollection(oldtn,strChild);
pn.Add(tn);
oldtn=tn;
}
}
catch(Exception excep){
Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message));
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// 设计器支持所需的方法 - 不要使用
/// 代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Btn_Search.Click += new System.EventHandler(this.Btn_Search_Click);
this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
private void Btn_Search_Click(object sender, System.EventArgs e)
{
try
{
this.BindGrid();
}
catch(Exception excep)
{
Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message));
}
} private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
try
{
this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
this.BindGrid();
}
catch(Exception excep)
{
Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message));
}
} private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
try
{
if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
{
e.Item.Cells[0].Text=((DataRowView)e.Item.DataItem)["FMaterielName"].ToString();
e.Item.Cells[1].Text=((DataRowView)e.Item.DataItem)["FMaterielSerial"].ToString();
e.Item.Cells[2].Text=((DataRowView)e.Item.DataItem)["FStandart"].ToString()+"公斤/"+((DataRowView)e.Item.DataItem)["FMaterialUnitName"].ToString();
}
}
catch(Exception excep)
{
Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message));
}
} private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
try
{
if(e.CommandName=="Selected"){
int intIndex=e.Item.ItemIndex;
int MaterielID=(int)this.DataGrid1.DataKeys[intIndex];
string MaterielName=e.Item.Cells[0].Text;
string MaterielSeriel=e.Item.Cells[1].Text;
string MaterielStandart=e.Item.Cells[2].Text;
//decimal MaterielPrice=(decimal)((DataRowView)e.Item.DataItem)["FLastPrice"]; ToyoInkClass.MaterielDetail md=new ToyoInkClass.MaterielDetail(MaterielID,MaterielName,MaterielSeriel,0m,MaterielStandart,0m,0m,"RMB");
OnMaterielSelected(new MaterielSelectedEvent(md));
}
}
catch(Exception excep)
{
Response.Write(ToyoInkClass.ToyoInkValidator.jsAlert(excep.Message));
}
}
}
}
与你说的可能基本类似吧