新写的一个商品比较控件CompareGrid,没有做设计视图。有兴趣的联络我。公布源码。...
<?xml:namespace prefix = kkding /><?xml:namespace prefix = asp />
/*
版权所有:版权所有(C) 2004,Kkding
文件编号:
文件名称:CompareGrid.cs
系统编号:
系统名称:CompareGrid
模块编号:
模块名称:数据条
设计文档:
完成日期:2005-7-06 17:29
作 者:丁科康
内容摘要:
文件调用:
*/
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Design;
using System.Reflection;
using System.Globalization;
using System.Collections;
using System.Text;
using System.Data;
namespace Kkding.Web.UI.WebControls
{
/// <summary>
/// CompareGrid 的摘要说明。
/// </summary>
[DefaultProperty("Columns"), ToolboxBitmap(typeof(System.Web.UI.WebControls.DataGrid)),
ToolboxData("<{0}:CompareGrid runat=server></{0}:CompareGrid>"),Designer(typeof(Kkding.Web.UI.Design.CompareGridDesigner))]
public class CompareGrid : WebControl
{
private CompareGridColumnCollection columnCollection;
private ArrayList columns = null;
private ArrayList itemsArray;
private CompareGridItemCollection itemsCollection;
private object dataSource;
private bool isinitcolumn=false;
[EditorAttribute("System.Web.UI.Design.WebControls.DataGridColumnCollectionEditor", typeof(System.Drawing.Design.UITypeEditor))]
[DefaultValueAttribute(null)]
[CategoryAttribute("Default")]
[DescriptionAttribute("Grid的表头")]
[PersistenceModeAttribute(PersistenceMode.InnerProperty)]
[MergablePropertyAttribute(false)]
public virtual CompareGridColumnCollection Columns
{
get
{
if (columnCollection == null)
{
columnCollection = new CompareGridColumnCollection(this);
if(columns == null)
{
columns = new ArrayList(columnCollection);
}
}
return columnCollection;
}
}
[
EditorBrowsableAttribute(EditorBrowsableState.Never),
BindableAttribute(BindableSupport.No),
BrowsableAttribute(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
]
public virtual CompareGridItemCollection Items
{
get
{
if (itemsCollection == null)
{
if (itemsArray == null)
{
base.EnsureChildControls();
}
if (itemsArray == null)
{
itemsArray = new ArrayList();
}
itemsCollection = new CompareGridItemCollection(itemsArray);
}
return itemsCollection;
}
}
[DefaultValueAttribute(null)]
[DescriptionAttribute("数据源")]
[DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
[CategoryAttribute("Data")]
[BindableAttribute(true)]
public virtual object DataSource
{
get
{
return dataSource;
}
set
{
if (value != null && !(value is IListSource) && !(value is IEnumerable))
{
throw new ArgumentException("Invalid_DataSource_Type");
}
dataSource = value;
}
}
[CategoryAttribute("Data")]
[DescriptionAttribute("Repeater_DataMember")]
[DefaultValueAttribute("")]
public virtual string DataMember
{
get
{
object local = base.ViewState["DataMember"];
if (local != null)
{
return (String)local;
}
else
{
return String.Empty;
}
}
set
{
base.ViewState["DataMember"] = value;
}
}
[BindableAttribute(true)]
[EditorAttribute("System.Web.UI.Design.ImageUrlEditor", typeof(System.Drawing.Design.UITypeEditor))]
[CategoryAttribute("Appearance")]
[DescriptionAttribute("Table_BackImageUrl")]
[DefaultValueAttribute("")]
public virtual string BackImageUrl
{
get
{
if (!base.ControlStyleCreated)
{
return String.Empty;
}
else
{
return ((TableStyle)base.ControlStyle).BackImageUrl;
}
}
set
{
((TableStyle)base.ControlStyle).BackImageUrl = value;
}
}
[CategoryAttribute("Appearance")]
[BindableAttribute(true)]
[DescriptionAttribute("Table_CellSpacing")]
[DefaultValueAttribute(-1)]
public virtual int CellSpacing
{
get
{
if (!base.ControlStyleCreated)
{
return -1;
}
else
{
return ((TableStyle)base.ControlStyle).CellSpacing;
}
}
set
{
((TableStyle)base.ControlStyle).CellSpacing = value;
}
}
[DefaultValueAttribute(-1)]
[CategoryAttribute("Appearance")]
[BindableAttribute(true)]
[DescriptionAttribute("Table_CellPadding")]
public virtual int CellPadding
{
get
{
if (!base.ControlStyleCreated)
{
return -1;
}
else
{
return ((TableStyle)base.ControlStyle).CellPadding;
}
}
set
{
((TableStyle)base.ControlStyle).CellPadding = value;
}
}
[DefaultValueAttribute(GridLines.None)]
[DescriptionAttribute("Table_GridLines")]
[CategoryAttribute("Appearance")]
[BindableAttribute(true)]
public virtual GridLines GridLines
{
get
{
if (!base.ControlStyleCreated)
{
return GridLines.None;
}
else
{
return ((TableStyle)base.ControlStyle).GridLines;
}
}
set
{
((TableStyle)base.ControlStyle).GridLines = value;
}
}
[BindableAttribute(true)]
[DescriptionAttribute("Table_HorizontalAlign")]
[CategoryAttribute("Layout")]
[DefaultValueAttribute(HorizontalAlign.NotSet)]
public virtual HorizontalAlign HorizontalAlign
{
get
{
if (!base.ControlStyleCreated)
{
return HorizontalAlign.NotSet;
}
else
{
return ((TableStyle)base.ControlStyle).HorizontalAlign;
}
}
set
{
((TableStyle)base.ControlStyle).HorizontalAlign = value;
}
}
public CompareGrid():base(HtmlTextWriterTag.Table)
{
//
// TODO: 在此处添加构造函数逻辑
//
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
Color color = base.BorderColor;
if (!color.IsEmpty)
{
writer.AddAttribute(HtmlTextWriterAttribute.Bordercolor, ColorTranslator.ToHtml(color));
}
Unit unit = base.BorderWidth;
if (GridLines == GridLines.None)
{
unit = Unit.Pixel(0);
}
else if (unit.IsEmpty || unit.Type != UnitType.Pixel)
{
unit = Unit.Pixel(1);
}
writer.AddAttribute(HtmlTextWriterAttribute.Border, ((int)unit.Value).ToString(NumberFormatInfo.InvariantInfo));
}
protected override Style CreateControlStyle()
{
return new TableStyle(base.ViewState);
}
internal void OnColumnsChanged()
{
}
protected override void CreateChildControls()
{
if(!isinitcolumn)
{
InitColumn();
isinitcolumn=!isinitcolumn;
}
}
protected virtual void InitColumn()
{
for(int i=0;i<columnCollection.Count;i++)
{
TableCell cell = new TableCell();
columnCollection[i].InitializeCell(cell , ListItemType.Header);
columnCollection[i].Cells.AddAt(0,cell);
}
}
protected override void RenderContents(HtmlTextWriter writer)
{
if(RunningInDesignMode())
{
DesignHtml( writer );
return ;
}
IEnumerator iEnumerator = Columns.GetEnumerator();
while (iEnumerator.MoveNext())
{
CompareGridColumn data = ((CompareGridColumn)iEnumerator.Current);
for(int i=0;i< Items.Count ; i++)
{
data.Cells.Add( (TableCell)Items[i].Controls[0]);
}
data.RenderControl(writer);
}
}
public override void DataBind()
{
OnDataBinding(EventArgs.Empty);
}
protected override void OnDataBinding(EventArgs e)
{
CreateChildControls();
base.OnDataBinding(e);
base.Controls.Clear();
base.ClearChildViewState();
CreateControlHierarchy(true);
// base.ChildControlsCreated = true;
}
protected virtual void CreateControlHierarchy(bool useDataSource)
{
//IEnumerator iEnumerator = null;
IEnumerable iEnumerable = null;
int i = -1;
if (itemsArray != null)
{
itemsArray.Clear();
}
else
{
itemsArray = new ArrayList();
}
if (!useDataSource)
{
i = (int)base.ViewState["_!ItemCount"];
if (i != -1)
{
iEnumerable = new DummyDataSource(i);
itemsArray.Capacity = i;
}
}
else
{
iEnumerable = DataSourceHelper.GetResolvedDataSource(DataSource, DataMember);
ICollection iCollection = (ICollection)iEnumerable ;
if (iCollection != null)
{
itemsArray.Capacity = iCollection.Count;
}
}
if(iEnumerable!=null)
{
IEnumerator iEnumerator = iEnumerable.GetEnumerator();
try
{
int j=0;
while (iEnumerator.MoveNext())
{
object local = iEnumerator.Current;
ListItemType listItemType = (j % 2 != 0) ? ListItemType.AlternatingItem : ListItemType.Item;
CompareGridItem repeaterItem = CreateItem(j, listItemType, useDataSource, local);
itemsArray.Add(repeaterItem);
j++;
}
}
finally
{
if(iEnumerator is IDisposable)
{
IDisposable iDisposable = (IDisposable)iEnumerator ;
if (iDisposable != null)
{
iDisposable.Dispose();
}
}
}
}
}
private CompareGridItem CreateItem(int itemIndex, ListItemType itemType, bool dataBind, object dataItem)
{
CompareGridItem repeaterItem = CreateItem(itemIndex, itemType);
//RepeaterItemEventArgs repeaterItemEventArgs = new RepeaterItemEventArgs(repeaterItem);
InitializeItem(repeaterItem);
if (dataBind)
{
repeaterItem.DataItem = dataItem;
for (int i = 0; i < (int)Columns.Count; i++)
{
TableCell cell = (TableCell)repeaterItem.Controls[i]; //Columns[i].Cells[itemIndex];
if(!cell.HasControls())
{
cell.Text = DataBinder.GetPropertyValue(dataItem,Columns[i].DataField,null);
}
else
{
//if(Columns[i] is TemplateColumn)
repeaterItem.DataBind();
}
}
}
//OnItemCreated(repeaterItemEventArgs);
//base.Controls.Add(repeaterItem);
if (dataBind)
{
repeaterItem.DataBind();
//OnItemDataBound(repeaterItemEventArgs);
repeaterItem.DataItem = null;
}
return repeaterItem;
}
protected CompareGridItem CreateItem(int itemIndex, ListItemType itemType)
{
return new CompareGridItem(itemIndex, itemType);
}
protected virtual void InitializeItem(CompareGridItem item)
{
//TableCellCollection tableCellCollection = item.Cells;
item.Controls.Clear();
for (int i = 0; i < (int)Columns.Count; i++)
{
TableCell tableCell = new TableCell();
Columns[i].InitializeCell(tableCell, item.ItemType);
Columns[i].Cells.Add(tableCell);
item.Controls.Add(tableCell);
}
}
/// <summary>
/// 是否是设计模式
/// </summary>
/// <returns></returns>
internal bool RunningInDesignMode()
{
if (Site != null)
return Site.DesignMode;
else
return false;
}
private void DesignHtml( HtmlTextWriter writer)
{
StringBuilder designresult = new StringBuilder();
designresult.Append( "<table>");
foreach(TableRow row in columns)
{
designresult.Append("<tr>");
foreach(TableCell cell in row.Cells)
{
designresult.Append("<td>");
designresult.Append(cell.Text);
designresult.Append("</td>");
}
designresult.Append("</tr>");
}
designresult.Append("</table>");
writer.WriteLine( designresult.ToString());
}
}
}
转载于:https://www.cnblogs.com/kkding/archive/2005/07/07/kkding.html
新写的一个商品比较控件CompareGrid,没有做设计视图。有兴趣的联络我。公布源码。...相关推荐
- .Net控件Telerik全套下载:Telerik Controls 2010 Q2 (附加DLL文件+源码)
Telerik专注于微软.Net平台的表示层与内容管理控件. Telerik Controls 2010 Q2控件组包括如下组件: Telerik RadControls for ASP.NET AJ ...
- Silverlight实用窍门系列:14.Visifire图表控件的使用一(图表的创建和基础使用)【附带源码实例】...
在实际项目开展中,往往会牵扯到需要绘制图表的情况.而Visifire是一个比较美观大方的第三方图表控件,本文会讲述如何初步使用Visifire控件. 首先我们需要从Visifire的官方网站下载:ht ...
- 【Android View】写一个蛛网评分控件
上周项目中要用到一个蛛网评分控件,于是就先上Github搜,搜了半天没搜着(也可能是我搜的关键词不对),那只好自己写一个了,就叫SpiderWebScoreView 先放一张最终效果图: 先整理一下需 ...
- 如何用 Swift 语言构建一个自定控件
本文译自:How To Make a Custom Control in Swift 用户界面控件是所有应用程序重要的组成部分之一.它们以图形组件的方式呈现给用户,用户可以通过它们与应用程序进行交互. ...
- Android之自定义一个环形进度控件
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/53445072 本文出自:[顾林海的博客] ##前言 最近看到一个评分和 ...
- ActiveReports 9 新功能:借助目录(TOC)控件为报表添加目录功能
ActiveReports 9 新功能:借助目录(TOC)控件为报表添加目录功能 原文:ActiveReports 9 新功能:借助目录(TOC)控件为报表添加目录功能 在最新发布的ActiveRep ...
- SAP UI5 初学者教程之三:开始接触第一个 SAP UI5 控件 试读版
Jerry 从 2014 年加入 SAP成都研究院 CRM Fiori 开发团队之后开始接触 SAP UI5,曾经在 SAP 社区和"汪子熙"微信公众号上发表过多篇关于 SAP U ...
- CropImageView android上的一个图片裁剪控件
CropImageView **文前:**本文非常容易让读者看的云里雾里,建议直接看效果图,觉得有用就去看源码吧. CropImageView的原型来自Cropimage_demo,是android上 ...
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应...
MFC小程序截图: 一.在MFC中简单使用WebBrowser的ActiveX插件的方法: 见博文: http://blog.csdn.net/supermanking/article/detail ...
- C++ 一个程序获取另一个程序Edit控件的内容
转载地址:https://www.cnblogs.com/lujin49/p/4796502.html //一个程序获取另一个程序Edit控件的内容 //根据指定程序的标题名获取改程序窗口的句柄 HW ...
最新文章
- SQL中的重复记录操作
- 超简单,带你学会多线程爬虫
- php考勤分析,php考勤系统
- wordpress插件-Media folder插件汉化版_优化加速插件
- SMBleed:Windows SMB 协议再被曝严重漏洞
- JavaScript:三大家族
- 如何隐藏电脑下方工具栏个别图标_怎么隐藏电脑任务栏右边的各种小图标 - 卡饭网...
- 安装Windows Server 2003 sp1/sp2提示产品密钥无效
- java adsl 拨号_[zt]利用脚本实现ADSL自动拨号上网
- 计算机原理 裸机运行,裸机恢复功能的工作原理 | Microsoft Docs
- PDF技术(一)-Java实现Office系列文件转PDF文件
- 毕业设计之基于Qt数字音频处理软件设计
- 一步一步教你开发微信扫码联合登录
- 导航地图是怎样绘制出来的?
- React: setState解析
- 百货商场数字化|百联靠全渠道实现疫情期间业务增长
- 数据可视化大屏应用场景有哪些?
- 计算机考试c++语言程序设计,2017年全国计算机二级C++语言程序设计考试大纲
- 道路交通事故现场计算机制图,道路交通事故现场图自动绘制
- 软件开发者们需要知道的四则市场营销技巧