有谁重写过treeView控件

sportdog 2004-09-07 04:02:05
我现在想在treeView加个textBox(服务器端的)
重写CreateChildControls()
protected override void CreateChildControls()
{
System.Web.UI.HtmlControls.HtmlInputText text = new HtmlInputText("text");
text.ID ="test";
this.Controls.Add(text);

base.CreateChildControls ();
}
可是报错如下:
CGC.Web.WebControls.UI.CGCTree”不允许使用子控件。

有谁知道如何给treeView加个文本框吗?
...全文
434 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
XiaoZhengGe 2004-09-21
  • 打赏
  • 举报
回复
up
Seeko0 2004-09-10
  • 打赏
  • 举报
回复
没有找到在TreeView TreeNode 中 Add web control 的方法,故通过
Node.Text = "<input id='text_1' type='text'>";的方法生成一个文本框到客户端,然后通过js编程获取文本框的值
Seeko0 2004-09-10
  • 打赏
  • 举报
回复
实现了checkbox 、radiobox、textbox、button功能
sportdog 2004-09-08
  • 打赏
  • 举报
回复
晕,怎么好象文不对题呀!
sneak 2004-09-08
  • 打赏
  • 举报
回复
如果你要让TreeView控件加文本框,估计要在TreeNode类中的RenderUpLevelPath事件中加入相应的实现,且不能直接用HtmlControls.HtmlInputText控件,而要用output.RenderBeginTag及相应的方法来实现。
我没试过!
Seeko0 2004-09-07
  • 打赏
  • 举报
回复
慢慢看,希望对你有用
Seeko0 2004-09-07
  • 打赏
  • 举报
回复
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

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

}
#endregion

private void btnSave_ServerClick(object sender, System.EventArgs e)
{
SaveData();
}

/// <summary>
/// 保存选择的试样信息
/// 编号规则
/// 基础报告 综合报告代码+"_"+基础报告代码+"_"+试验项目代码
/// 试验指标 综合报告代码+"_"+基础报告代码+"_"+试验项目代码+"_"+试验指标序号
/// 通过分样号删除以前存在试验类型的所有记录
/// string sqlstr= string.Format ("DELETE FROM 委托单_接口表 WHERE 分样序号='{0}';",FYH);
/// 委托单_接口表(序号,试验项目序号,试验要求序号,分样序号,费用序号,其它接口序号) 后面两个为预留接口 费用接口通过委托单编号来进行连接,委托单编号=财务编号
/// 生成sql语句
/// id='LA_LA01_002'
/// </summary>
private void SaveData()
{
//通过;拆分保存过的记录
string[] sels = hiddenField.Text.Split(';');
//清空历史保存记录
string sqlstr= string.Format ("DELETE FROM 委托单_试样_保存信息 WHERE 分样号={0};",FYH);

//保存过的指标信息
ArrayList selectedZB=new ArrayList();
for(int i=0;i<sels.Length ;i++)
{
//排除为空的情况
if(sels[i].Trim().Length ==0)
continue;
string[] s = sels[i].Split('_');
if(s.Length == 4) //试验指标
{
sqlstr+= string.Format("insert into 委托单_试样_保存信息(综合报告代码,基础报告代码,试验项目代码,试验项目指标编号,分样号)values('{0}','{1}','{2}',{3},{4});",s[0],s[1],s[2],s[3],FYH);
selectedZB .Add(sels[i]);
}
}
//保存选择的信息
DataAccess.ExecuteSql(sqlstr);

sqlstr = string .Format("DELETE FROM Dynamic_CountRecord where 分样id={0};",FYH);
for(int i=0;i<selectedZB.Count;i++)
{
string id =selectedZB[i].ToString();
if(IsInNums(id))
{
int n=id.LastIndexOf("_");
string input = "input_"+id;
string 指标id =id.Substring(n+1,id.Length-n-1);
string 试验次数= string.Empty;
getNumInputHideValue(指标id,ref 试验次数);
sqlstr+= string.Format("insert into Dynamic_CountRecord(分样id,指标id,试验次数)values({0},{1},{2});",FYH,指标id,试验次数);
}
}
//保存输入的数字信息
DataAccess.ExecuteSql(sqlstr);
Page.RegisterStartupScript ("info","<script>window.close();</script>");

getSavedInfo(true);
InputDataBound();
}

/// <summary>
/// 判断需要输入数字的情况
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
private bool IsInNums(string Id)
{
num = (ArrayList)ViewState["sys_savedNumInfo"];
bool isIn=false;
for(int i=0;i<num.Count;i++){
if(num[i].ToString() ==Id){
isIn=true;
break;
}
}
return isIn;
}

/// <summary>
/// 获取对应指标的试验次数
/// </summary>
/// <param name="指标id"></param>
/// <param name="试验次数"></param>
private void getNumInputHideValue(string 指标id,ref string 试验次数)
{
string[] strs = this.hiddenFieldNum.Text.Split(';');
for(int i=0;i<strs.Length;i++)
{
if(strs[i] =="")
continue;
string[] strs1=strs[i].Split(':');
if(strs1.Length !=2)
continue;
int n = strs1[0].LastIndexOf("_");

if(strs1[0].Substring(n+1,strs1[0].Length-n-1)==指标id)
{
试验次数 = strs1[1];
break;
}
}
}
private void Add_Style_1_Error(object sender, EventArgs e)
{
Page.RegisterStartupScript("info","<script>alert(\"保存所选试样信息出错,请重试!\");</script>");
Server.ClearError();
}
}

}
Seeko0 2004-09-07
  • 打赏
  • 举报
回复
private void CreatedRelateIndex(ref TreeNode tree,DataRow row)
{
DataTable dt_指标=new DataTable();
DataAccess.dataTable(string.Format("select 指标id,ISNULL(试验次数,1) AS 次数 from Dynamic_CountReCord where 分样id={0}",FYH),ref dt_指标);
DataAccess.dataReader(string.Format("select * from sys_试验项目_对应指标 where 试验项目代码='{0}'",row["试验项目代码"].ToString()),ref dr);
string s =string.Empty;
while(dr.Read())
{
TreeNode node =new TreeNode();
//试验指标 综合报告代码+"_"+基础报告代码+"_"+试验项目代码+"_"+试验指标序号
string id =string.Format("{0}_{1}_{2}_{3}",row["综合报告代码"].ToString(),row["基础报告代码"].ToString(),row["试验项目代码"].ToString(),dr["序号"].ToString());
string numvalue=string.Empty;
DataRow[] row_指标 =dt_指标.Select("指标id="+dr["序号"].ToString());
if(row_指标.Length ==0)
numvalue="1";
else
numvalue = row_指标[0]["次数"].ToString();

if(dr["是否单选"].ToString() =="")
s = "";
else if(dr["是否单选"].ToString() =="True")
s= "<input id='"+id+"' type ='radio' "+(isSavedById(id)?"checked":"")+" name = '"+dr["试验项目代码"].ToString()+"'>";
else
{
s= "<input id='"+id+"' type ='checkbox' "+(isSavedById(id)?"checked":"")+" name = '"+dr["试验项目代码"].ToString()+"'>";
}
node.ID ="ZB_"+id;

//此处进行更改,以便能够获取每个点的设置情况
if(dr["DynamicId"].ToString()=="")
node.Text =s+string.Format("<label >{1}</label>",id,dr["指标名称"].ToString());
else
node.Text =s+string.Format("<label >{1}</label>",id,dr["指标名称"].ToString()) +"    " +string.Format("<input type='button' value='编辑' onclick ='return showwindow(\"{0}\",\"{1}\")'>",dr["DynamicId"],dr["序号"]);

//需要进行数字判断
if(dr["是否计数"].ToString()=="True")
{
node.Text =s+string.Format("<label >{1}</label>",id,dr["指标名称"].ToString()) +"    " +dr["计数描述信息"].ToString().Replace("{0}","<input id = 'input_"+id+"' type='text' value = '"+numvalue+"' size='6'onchange='checknum();event.cancelBubble=true;'>");
numInput += "input_"+id+":"+numvalue+";";
num.Add(id);
}
//如果子节点和父节点名称相同,则将子节点信息修改父节点,使其显示一级目录
if(dr["指标名称"].ToString() ==row["试验项目名称"].ToString())
{
tree = node;
break;
}
tree.Nodes.Add(node);
}
ViewState["sys_savedNumInfo"] = num;
dr.Close();
}
/// <summary>
/// 获取保存的试样选择信息
/// </summary>
/// <param name="isUpdated">是否是更新后获取</param>
/// <returns>Hashtable </returns>
private Hashtable getSavedInfo(bool isUpdated)
{
if(ViewState["SavedInfo"]!=null && !isUpdated)
return (Hashtable)ViewState["SavedInfo"];

if(ViewState["SavedInfo"] ==null || isUpdated)
{
Hashtable ht =new Hashtable();
SqlDataReader dr=null;
SysClassLibrary.DataAccess.dataReader(string.Format("select * from 委托单_试样_保存信息 where 分样号={0}",FYH),ref dr);

//子节点id
string id=string.Empty;
//父节点pid
string pid=string.Empty;

//此处循环中只有子节点被选中的情况,由子节点判断父节点是否也被选中
while(dr.Read())
{
if(dr[1].ToString()!="" && dr[2].ToString()!="" && dr[3].ToString()!="" && dr[5].ToString()!="")
id =string.Format("{0}_{1}_{2}_{3}",dr[1].ToString(),dr[2].ToString(),dr[3].ToString(),dr[5].ToString()); //指标
if(!ht.ContainsKey(id))
ht.Add(id,id);
if(dr[1].ToString()!="" && dr[2].ToString()!="" && dr[3].ToString()!="")
pid =string.Format("{0}_{1}_{2}",dr[1].ToString(),dr[2].ToString(),dr[3].ToString()); //基本
if(!ht.ContainsKey(pid))
ht.Add(pid,pid);
}
dr.Close();

//同时将以前保存的信息存在hiddenField中去,方便客户端进行筛选
string selstr = ";";
foreach(DictionaryEntry d in ht)
{
selstr+=d.Key.ToString()+";";
}
this.hiddenField.Text =selstr;

ViewState["SavedInfo"] =ht;
}
return (Hashtable)ViewState["SavedInfo"];
}

private bool isSavedById(string id)
{
Hashtable ht=getSavedInfo(false);
return ht.ContainsKey(id);
}
Seeko0 2004-09-07
  • 打赏
  • 举报
回复
//cs
/*
* code name :Add_style_1.aspx.cs
* author:wuchen
* date:2004/5/22
* description : 保存选择的试样和条件信息到委托单_接口表,以前的保存方式是保存信息到委托单_试样_保存记录
* 现在发现这种方式可实施性比较差,故更改.以前的code请见 Add_style_1_bak20040522.aspx.cs
*
* update date:2004/06/11
* description:甲方需求发生变化,显示上体现出多选和单选的区别
*
* update date:2004/08/06
* description:增加在本页输入试验的次数和 弹出多条数据录入的功能
* 这些功能对应的数据表:Dynamic_CountRecord ,记录试验次数
* Dynamic_Settings 设置对应数据表的显示
* Dynamic_.... 对应的多条数据录入数据表
* sys_试验项目_对应指标 增加了字段是否计数、计数描述信息、DynamicId
* */

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 WebControlLibrary ;
using System.Data.SqlClient;
using SysClassLibrary ;
using Microsoft.Web.UI.WebControls;
namespace HWE.wtd
{
/// <summary>
/// TreeView's property
/// </summary>
public class Add_Style_1 : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlForm Form1;
protected System.Web.UI.HtmlControls.HtmlInputButton btnSave;
protected System.Web.UI.HtmlControls.HtmlForm Form3;
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
protected System.Web.UI.WebControls.Label LabelType;
protected System.Web.UI.WebControls.RadioButton RadioButton1;
/// <summary>
/// 选择的信息
/// </summary>
protected System.Web.UI.WebControls.TextBox hiddenField;
protected System.Web.UI.WebControls.TextBox hiddenFieldNum;
public string name;

DataTable dt=new DataTable();
private SqlDataReader dr =null ;
/// <summary>
/// 传入样式序号
/// </summary>
private string FYH=string.Empty ;
//委托单序号
private string WTD_NO=string.Empty;
private string numInput =string.Empty; //保存填入的文字信息
/// <summary>
/// 保存生成的数字信息
/// </summary>
ArrayList num=new ArrayList();
private void Page_Load(object sender, System.EventArgs e)
{

//清楚曾经保存的信息
num.Clear();


FYH= Request.QueryString["FYH"];
this.TreeView1.Attributes["onclick"]="return treeview_onclick(this);";
this.hiddenField.Attributes["style"]="display:none";
this.hiddenFieldNum.Attributes["style"]="display:none";
this.DataBind();
//测试数据
if(FYH ==null)
{
return;
}
if(!IsPostBack)
{
this.LabelType.Text=(string)DataAccess.ExecuteScalar("select TOP 1 试样类型 from 委托单_样式明细表 where 序号="+FYH);


InputDataBound();
}
name=this.LabelType.Text ;

//输出分样序号
Page.RegisterClientScriptBlock("FYH_"+this.UniqueID ,string.Format ("<script language='javascript'>var FYH='{0}';</script>",FYH));
this.DataBind();
}

/// <summary>
/// 输入数据绑定
/// </summary>
private void InputDataBound()
{
//清除以前产生的树
TreeView1.Nodes.Clear();
numInput ="";
//创建选择树
CreateTree();

//输出文字框中默认值
this.hiddenFieldNum.Text = numInput;
}
private void CreateTree()
{
//目录数起的作用仅仅是显示出记录,保存通过操作相应的选择按钮来完成
//对CheckBox 和 RadioBox 的id 编号进行规范
//同时在客户端创建一个隐藏控件来记录被选择的控件的id值,然后在服务器端接收这些控件值,进行拆分后保存到服务器,隐藏按钮的值为最后选择的试验项目
//综合报告 综合报告
//基础报告 综合报告代码+"_"+基础报告代码+"_"+试验项目代码
//试验指标 综合报告代码+"_"+基础报告代码+"_"+试验项目代码+"_"+试验指标序号
//如何隐藏某些不需要显示的综合报告,通过在服务器端设置一个属性了确定不生成该类报告的控件

//获取保存的信息
string sylx=this.LabelType.Text;
DataAccess.dataTable(string.Format("select * from view_试验试样信息 where 分样序号 ={0} and 是否显示='1' ORDER BY 综合报告代码 ASC,基础报告代码 ASC ",FYH),ref dt);
//DataAccess.dataTable(string.Format("select * from view_试验试样信息 where 分样序号 ={0} ORDER BY 综合报告代码 ASC,基础报告代码 ASC ",FYH),ref dt);
string 综合报告代码=string.Empty;
string 基础报告代码=string.Empty ;
//一级目录
TreeNode ParentNode =new TreeNode();
foreach(DataRow row in dt.Rows)
{
//创建基础报告列表
TreeNode node_jc;
node_jc=new TreeNode();
node_jc.Expanded =true;
//基础报告 综合报告代码+"_"+基础报告代码+"_"+试验项目代码+"_"
综合报告代码 = row["综合报告代码"].ToString();

string id =string.Format("{0}_{1}_{2}",综合报告代码,row["基础报告代码"].ToString(),row["试验项目代码"].ToString());
node_jc.ID = string.Format("$JC_{0}_{1}",row["分样序号"].ToString(),row["试验项目序号"].ToString());
node_jc.Text =string.Format ("<input id='{0}' "+(isSavedById(id)?"checked":"")+" type=\"checkbox\"/>{1}",id,row["试验项目名称"].ToString());
CreatedRelateIndex(ref node_jc,row);
TreeView1.Nodes.Add(node_jc);
}
}
Seeko0 2004-09-07
  • 打赏
  • 举报
回复
//参考一下下面的代码,实现了checkbox 、radiobox、textbox、button功能
//aspx
<%@ Page language="c#" Codebehind="Add_Style_1.aspx.cs" AutoEventWireup="false" Inherits="HWE.wtd.Add_Style_1" %>
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>
<%# name%>
试验 选择试验项目</title>
<base target="_self">
<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">
<LINK href="../cmdimg/style.css" type="text/css" rel="stylesheet">
<script language="javascript" id="clientEventHandlersJS">
<!--
var twcount;
var FYH;
function btnCancel_onclick() {
window.close();
}
window.onunload =function(){
returnValue= "3";
}
window.onload =function(){
dialogHeight ="500px";
}

//单击TreeView
function treeview_onclick(e){
//获取单击TreeView控件treenode编号
var i=e.clickedNodeIndex;
if(i==null){
return false;
}
var node =e.getTreeNode(i);

//获取原始状态
var checked;
try{
checked= node.getAttribute("checked");
}catch(e){
checked=false;
}
//改变选择的按钮状态
checked = !checked;
try{
node.setAttribute("checked",checked);
}
catch(e){
alert(e.description)
}
if(node.getAttribute("subtree")!=null){
var all=node.getAttribute("subtree").all;
checksubtree(all,checked);
}
}
var type="";
function checksubtree(all,checked){
for(i=0;i<all.length;i++){
if(all[i].type =="checkbox"){
all[i].checked = checked;
setchecked(all[i],checked)
type="checkbox";
}
if(all[i].type=="radio") //radio类型需要单独处理
{
if(type!="radio"){
all[i].checked = checked;
setchecked(all[i],checked)
type ="radio";
}
else{
setchecked(all[i],false)
type ="radio";
}
}
}
type="";
}
function setchecked(chk,checked){
//清除相同的选项
var hide = document.getElementById("hiddenField");
var checkedstr = hide.value;
if(checkedstr.charAt(0)!=";")
checkedstr += ";";
checkedstr=checkedstr.replace(";"+chk.id+";",";");
//如果类型为radio需要清除以前选择的记录
if((chk.type =="radio") &&(chk.checked)){
//radiobox编号规则为 综合报告代码+"_"+基础报告代码+"_"+试验项目代码+"_"+试验指标序号
var i = chk.id.lastIndexOf("_");
var no = chk.id.substring(0,i+1);//like LA_LA01_001_

//通过;进行拆分,查找出以前选择的同类复选信息进行处理
var arr =checkedstr.split(";");
//重新对checkedstr进行赋值
checkedstr=";";
for(i=0;i<arr.length;i++){
if(arr[i] =="")
continue;

if(arr[i].indexOf(no) =="-1"){ //表示不存在同时需要排除单选框的存在情况
checkedstr+=arr[i]+";";
}
}
}
if(checked){ //增加选择
checkedstr += chk.id+";";
}
hide.value =checkedstr;
}
function showwindow(e,zid){
var s=showModalWindow("../wtd/Add_Dynamic.aspx?id="+e+"&FYH="+FYH+"&zid="+zid,550,450);
event.cancelBubble=true;
}

function info(e){
alert(e);
}
function checknum(){
var e = event.srcElement
if(isNaN(e.value) || e.value<1){
e.value="1";
alert("输入值只能为不小于1的整数,请重新输入");
return false;
}
savevalues(e);
event.cancelBubble=true;
}
function savevalues(e){
var value=e.value;
var id= e.id;
var hideNum = document.getElementById("hiddenFieldNum");
var numstr = hideNum.value;
if(numstr.indexOf(id+":")==-1)//一个也没有
numstr+=id+":"+value+";";

//通过一定的格式保存数据信息 input_LE_LE02_28_38:1 (id:value;id:value)
var arr =new Array();
arr = numstr.split(";");
//判断其中是否包含有该表格控件的值
numstr="";
for(i=0;i<arr.length;i++){
if(arr[i]=="")
continue;
if(arr[i].indexOf(id+":")!=-1){ //进行相加
numstr+=id+":"+value+";";
}
else{
numstr+=arr[i]+";";
}
}
hideNum.value =numstr;

}
function setcheckedNum(id,box){
var hideNum = document.getElementById("hiddenFieldNum");
var numstr = hideNum.value;
if(numstr.charAt(0)!=";")
numstr += ";";

//如果类型为radio需要清除以前选择的记录
var i = id.lastIndexOf("_");
var no =id.substring(0,i+1);//like input_LA_LA01_001_
if((box.type =="radio") &&(box.checked)){
//radiobox编号规则为 综合报告代码+"_"+基础报告代码+"_"+试验项目代码+"_"+试验指标序号
var i = box.id.lastIndexOf("_");
var no = box.id.substring(0,i);//like LA_LA01_001_
alert(no);
//通过;进行拆分,查找出以前选择的同类复选信息进行处理
var arr =numstr.split(";");
//重新对checkedstr进行赋值
numstr=";";
for(i=0;i<arr.length;i++){
if(arr[i] =="")
continue;
if(arr[i].indexOf(no) =="-1"){ //表示不存在同时需要排除单选框的存在情况
numstr+=arr[i]+";";
}
else{
numstr+= arr[i].replace(id,"")+";";
}
alert(arr[i]);
}
}
if((numstr.indexOf(id)=="-1")&& box.checked)
numstr += id+";";
if(!box.checked)
numstr = numstr.replace(";"+id+";",";");
hideNum.value =numstr;
}
//-->
</script>
</HEAD>
<body bgColor="#99cc99" scroll="no">
<FORM id="Cmd" method="post" runat="server">
<TABLE id="Table3" height="100%" cellSpacing="0" cellPadding="3" width="500" align="center"
border="0">
<TR>
<TD class="TitleHeadStyle" style="HEIGHT: 27px; BACKGROUND-COLOR: infobackground" vAlign="middle"
align="left" colSpan="2">试样项目-试验类型[<asp:label id="LabelType" runat="server" BackColor="Transparent"></asp:label>]</TD>
</TR>
<TR>
<TD vAlign="top" align="left" bgColor="#ffffff" colSpan="2"><iewc:treeview id="TreeView1" runat="server" SelectedNodeIndex="0" BorderStyle="None" Height="100%"
Width="100%" SelectedStyle="backgroudcolor:FF0000;" Indent="40">
<iewc:TreeNodeType CheckBox="True"></iewc:TreeNodeType>
</iewc:treeview></TD>
</TR>
<TR>
<TD style="DISPLAY: none" align="left"><FONT face="宋体"><INPUT id="autoClose" type="checkbox"><label title="选择该选项保存数据后窗口将自动关闭..." for="autoClose">自动关闭</label></FONT></TD>
<TD style="HEIGHT: 56px" align="right"><FONT face="宋体"><asp:textbox id="hiddenFieldNum" runat="server" Width="181px" ReadOnly="True"></asp:textbox> <asp:textbox id="hiddenField" runat="server" Width="114px" ReadOnly="True"></asp:textbox></FONT><INPUT class="bluebotton" id="btnSave" title="快捷键( ALT+S )确定保存设置的信息.." type="button" value="保存"
name="btnSave" runat="server"><INPUT class="yellowbotton" id="btn_Close" accessKey="S" onclick="window.close();" type="button"
value="关闭" name="btn_Close"></TD>
</TR>
<TR>
<TD align="left" colSpan="2" height="20">提示:请将您要设置的试验报告设置为选中状态。</TD>
</TR>
</TABLE>
</FORM>
</body>
</HTML>


sportdog 2004-09-07
  • 打赏
  • 举报
回复
星星们呢?
sportdog 2004-09-07
  • 打赏
  • 举报
回复
to evans00220405(系统分析师): 加属性,加js我会,你能帮我解决一下吗?

我在页面上加了一<input>,后台给他赋值,通过input里的值设定tree的checkbox状态.
写了些控制tree的脚本,如:点父选中所有子,点子选中它的父及父的父.....
页面上还放了一<input>保存树的个节点的状态(用于提交到后台,后台解析完后,保存到数据库中),功能都实现了,我现在想把这些功能封装成一控件.

可继承treeView确不让我在里面加别的控件,大家帮帮忙好吗?给思路,代码都行!
BillTuan 2004-09-07
  • 打赏
  • 举报
回复
服务器端控件,那就不能在htc文件实现了!
关注!
evans00220405 2004-09-07
  • 打赏
  • 举报
回复
我重写写过!并加了很多javascript
sportdog 2004-09-07
  • 打赏
  • 举报
回复
public class CGCTree:Microsoft.Web.UI.WebControls.TreeView
可以继承呀.
我在里面用HtmlTextWriter也可以加一input上去可我想要服务器端的textbox


不继承?那有其他方法吗?大家帮忙顶顶吧!
zhangyp 2004-09-07
  • 打赏
  • 举报
回复
gz
Eddie005 2004-09-07
  • 打赏
  • 举报
回复
继承是不允许的,
但是为什么非要继承呢?
dxphero 2004-09-07
  • 打赏
  • 举报
回复
up

62,054

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧