不好意思,代码如下:
public class HVDDataGrid : DataGrid, INamingContainer
{ private System.Web.UI.WebControls.DataGrid datagrid = new DataGrid();
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter writer)
{
AddAttributesToRender(writer);
LiteralControl l = new LiteralControl("");
l.RenderControl(writer);
for (int ii = 0; ii < thecel().Length; ii++)
{
BoundColumn tm = new BoundColumn();
tm.HeaderText = thecel()[ii];
tm.DataField = thecel()[ii];
datagrid.Columns.Add(tm);
DataBind();
}
datagrid.RenderControl(writer);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
public override void DataBind()
{
datagrid.DataBind();
} public override object DataSource
{
get
{
return this.datagrid.DataSource;
}
set
{
this.datagrid.DataSource = value;
} }
public override DataGridColumnCollection Columns
{
get
{
return base.Columns;
}
}
public override bool AutoGenerateColumns
{
get
{
return datagrid.AutoGenerateColumns;
}
set
{
datagrid.AutoGenerateColumns = value;
}
} public string[] thecel()
{
return cells.Split(',');
} private string _cells="";
public String cells
{
get { return _cells; }
set { _cells = value; }
}
}
public class HVDDataGrid : DataGrid, INamingContainer
{ private System.Web.UI.WebControls.DataGrid datagrid = new DataGrid();
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter writer)
{
AddAttributesToRender(writer);
LiteralControl l = new LiteralControl("");
l.RenderControl(writer);
for (int ii = 0; ii < thecel().Length; ii++)
{
BoundColumn tm = new BoundColumn();
tm.HeaderText = thecel()[ii];
tm.DataField = thecel()[ii];
datagrid.Columns.Add(tm);
DataBind();
}
datagrid.RenderControl(writer);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
public override void DataBind()
{
datagrid.DataBind();
} public override object DataSource
{
get
{
return this.datagrid.DataSource;
}
set
{
this.datagrid.DataSource = value;
} }
public override DataGridColumnCollection Columns
{
get
{
return base.Columns;
}
}
public override bool AutoGenerateColumns
{
get
{
return datagrid.AutoGenerateColumns;
}
set
{
datagrid.AutoGenerateColumns = value;
}
} public string[] thecel()
{
return cells.Split(',');
} private string _cells="";
public String cells
{
get { return _cells; }
set { _cells = value; }
}
}
解决方案 »
- asp.net里有没有既能选择又能输入的控件呀?dropdownlist可以吗?
- 怎么隐藏某一列?
- <a runat="server">onclick事件去后台变量的问题
- ASP.NET三层构架的问题
- asp.net实现在线拍照
- 读取图片文件
- 在线求助: ORA-12638: Credential retrieval failed
- 有关2003主机的windows验证问题
- 两个关于前台页面显示数据的简单问题.顶者有分!解决即结帖!
- 动态创建 dataset 后 访问时出错 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 在西安需要.Net的人多还是J2EE的人多啊
- 【提问】如何从收藏夹文件中提取信息【在线放分】
private string _cells="";
public String cells
{
get { return _cells; }
set { _cells = value; }
}
===============
public String cells
{
get { return ViewState["cells"]!=null?ViewState["cells"]:String.Empty; }
set { ViewState["cells"]= value; }
} ==========
自定义属性建议用视图状态,不然你的属性状态怎么保存?
private System.Web.UI.WebControls.DataGrid datagrid = new DataGrid();
复合控件的做法,应该是重载CreateChildControls,然后在里面进行实例化,然后设置ChildControlsCreated 属性为true避免重复生成控件,提高性能,使用的时候,先用EnsureChildControls方法检测控件是否生成
=====================using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;namespace CustomControls
{
public class HVDDataGrid : DataGrid, INamingContainer
{ private System.Web.UI.WebControls.DataGrid datagrid ;
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter writer)
{
EnsureChildControls();//使用控件前,先检测控件是否已经生成,避免“未将对象设置引用对象的实例”的错误
AddAttributesToRender(writer); LiteralControl l = new LiteralControl("");
l.RenderControl(writer);
for (int ii = 0; ii < thecel().Length; ii++)
{
BoundColumn tm = new BoundColumn();
tm.HeaderText = thecel()[ii];
tm.DataField = thecel()[ii];
datagrid.Columns.Add(tm);
DataBind();
}
datagrid.RenderControl(writer);
}
protected override void CreateChildControls()
{
datagrid = new DataGrid();
this.Controls.Add(datagrid);
base.CreateChildControls();
ChildControlsCreated = true;//避免重复生成控件 }
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
public override void DataBind()
{
datagrid.DataBind();
} public override object DataSource
{
get
{
return this.datagrid.DataSource;
}
set
{
this.datagrid.DataSource = value;
} } public override DataGridColumnCollection Columns
{
get
{
return base.Columns;
}
} public override bool AutoGenerateColumns
{
get
{
return datagrid.AutoGenerateColumns;
}
set
{
datagrid.AutoGenerateColumns = value; }
} public string[] thecel()
{
return cells.Split(',');
} public String cells
{
get { return ViewState["cells"] != null ? (string)ViewState["cells"] : String.Empty; }
set { ViewState["cells"] = value; }
} }
}
=============using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;namespace CustomControls
{
public class HVDDataGrid : DataGrid, INamingContainer
{ private System.Web.UI.WebControls.DataGrid datagrid ;
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter writer)
{
EnsureChildControls();//使用控件前,先检测控件是否已经生成,避免“未将对象设置引用对象的实例”的错误
AddAttributesToRender(writer); LiteralControl l = new LiteralControl("");
l.RenderControl(writer);
for (int ii = 0; ii < thecel().Length; ii++)
{
BoundColumn tm = new BoundColumn();
tm.HeaderText = thecel()[ii];
tm.DataField = thecel()[ii];
datagrid.Columns.Add(tm);
DataBind();
}
datagrid.RenderControl(writer);
}
protected override void CreateChildControls()
{
datagrid = new DataGrid();
this.Controls.Add(datagrid);
ChildControlsCreated = true;//避免重复生成控件
base.CreateChildControls();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
public override void DataBind()
{
datagrid.DataBind();
} public override object DataSource
{
get
{
return this.datagrid.DataSource;
}
set
{
this.datagrid.DataSource = value;
} } public override DataGridColumnCollection Columns
{
get
{
return base.Columns;
}
} public override bool AutoGenerateColumns
{
get
{
EnsureChildControls();
return datagrid.AutoGenerateColumns;
}
set
{
EnsureChildControls();
datagrid.AutoGenerateColumns = value; }
} public string[] thecel()
{
return cells.Split(',');
} public String cells
{
get { return ViewState["cells"] != null ? (string)ViewState["cells"] : String.Empty; }
set { ViewState["cells"] = value; }
} }
}
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"UserID") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"UserID") %>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</FW:HVDDataGrid>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
} private void BindGrid()
{
DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn("UserID", Type.GetType("System.Int32"));
DataColumn dc2 = new DataColumn("UserName", Type.GetType("System.String"));
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
for (int i = 0; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr["UserID"] = 1;
dr["UserName"] = "user" + i;
dt.Rows.Add(dr);
}
HVDDataGrid1.DataSource = dt;
HVDDataGrid1.DataBind();
}
}