http://chs.gotdotnet.com/quickstart/aspplus/doc/webpagelets.aspx

解决方案 »

  1.   

    这是我做的一个自定义控件
    <%@ 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>
      

  2.   

    --------------code
    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;
    }
    }
      

  3.   

    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));
    }
    }
    }
    }
    与你说的可能基本类似吧