在c#中实现DataGridView中自定义控件列
来源:互联网 发布:pdf在线拆分软件 编辑:程序博客网 时间:2024/06/06 17:08
昨天晚上临睡前写了长长的一大堆,后来睡下去的时候,包括今天早上眼睛睁开来,发觉昨晚写的东西里思路还是有点混乱的。于是,今天再来不补充篇。
要实现的内容先表述下:新闻标题列表页上,呈现如下
新闻日期1:新闻标题1【所属类别名称】
新闻日期2:新闻标题2【所属类别名称】
。。。
新闻标题和日期同属一张数据表中,类别ID也在该表中,但类别名称需要去另外张表中查找。昨晚文章中其实现在回头想来,关于这个问题它所提供的核心解决方案是利用SQL的联表查询语句,来一次性创建所需要的记录集。后来睡下去后回想了下,其实这个核心方法,与到底使用SqlDataReader还是DataSet其实是无关的。到是这个方法唯一需要注意的问题是,联表查询中所涉及的这两张,必须是来自同一个数据库的(数据库名相同)!至于到底是自己傻乎乎地循环输入表格,还是直接绑定在显示控件比如DataList、DataGridView上,这都可以。
那么,假如比如上面提到的无法联表查询的情况时,又要实现这样的功能时,该如何处理?
写到这里的时候,我忽然修改了下文章标题,将问题更加简单化和明确化为一种效果的实现:在c#中实现DataGridView中自定义控件列。能否实现这样的效果的话,基本上问题也就讲清楚了。上面的一大段可以忽略了。
DataGrid1.AutoGenerateColumns=false; //要自定义DataGridView控件列,必须先将它的自动生成列功能停掉
TemplateColumn tm=new TemplateColumn();
tm.ItemTemplate=new ColumnTemplate1();
tm.HeaderText="新闻类别";
DataGrid1.Columns.Add(tm); //至此,DataGridView控件中的第一个列已经创建,DataGridView中自定义需要使用模板列对象(TemplateColumn)
//当前尚未加载数据,只是创建了列和列名
//下面对DataGridView整体绑定数据,即比如新闻日期和标题数据
。。。
this.DataGrid1.Databind(); //整体大部分数据绑定完毕,定制列除外,比如新闻类别列
//假设在新闻列表显示页上的DataGrid中有个用于显示类别的控件是个叫category的下拉框控件(这里我暂时从某篇文献中摘录下拉框加载的例子,暂没有试验如何绑定显示特定值)
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) //DataGrid定制列的数据绑定要使用ItemDataBound事件
{
SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
SqlDataAdapter da=new SqlDataAdapter("select * from dep",conn);
DataSet ds=new DataSet();
da.Fill(ds,"table1");
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
DropDownList ddl=(DropDownList)e.Item.FindControl("dep"); //用e.Item.FindControl来查找到需要绑定值得目标控件
ddl.DataSource=ds.Tables["table1"];
ddl.DataTextField="depname"; //下拉框的外观显示值
ddl.DataValueField="depid"; //下拉框真值
ddl.DataBind(); //下拉框列表数据绑定完毕
ddl.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"depid"))).Selected=true;
//这句是精华中的精华:e.Item.DataItem取到当前记录的某字段值,然后据此,利用Items.FindByValue查找到列表中相符合的真值条目,然后将其选中
//依次来看,如果页面上记录列表中,如果有多个下拉框需要绑定,也可以实现,即参照da.Fill(ds, "table1")的方法,再多创建几个DataSet中的表
}
参考文献:http://blog.chinaunix.net/uid-9236609-id-3069178.html
- 在c#中实现DataGridView中自定义控件列
- 在DataGridView控件中实现冻结列分界线
- 在DataGridView控件中实现冻结列分界线
- 如何设计WinForm中DataGridView控件的自定义按钮列
- C#在datagridview单元格中增加日期控件,实现单元格日期控件下拉
- C#在datagridview单元格中增加日期控件,实现单元格日期控件下拉
- c#如何实现在datagridview中加入时间控件、numericupanddown控件
- 在datagridview中添加列
- C#中DataGridView实现某一列只能输入数字
- C#中DataGridView实现某一列只能输入数字
- C#中DataGridView控件使用
- 在C#中使用控件DataGridView实现数据库增删改查
- 在C#中使用控件DataGridView实现数据库增删改查
- 在C#中使用控件DataGridView实现数据库增删改查
- 在C#中使用控件DataGridView实现数据库增删改查
- 在C#中使用控件DataGridView实现数据库增删改查
- 在C#中使用控件DataGridView实现数据库增删改查
- How to: Host Controls in Windows Forms DataGridView Cells(介绍如何在datagridview中自定义列)
- 完全平方数的判定及整数平方根的快速求解
- 线性表顺序存储
- 黑马程序员------IO流(No.2)(字节流、InputStream、OutputStream、转换流、改变输入输出设备)
- 菜单命令的路由
- 光大期货人生
- 在c#中实现DataGridView中自定义控件列
- Java的接口和C++的虚类的相同和不同处
- MFC对话框初始化及大小设置
- 编码问题汇总
- RuntimeException异常可以在没有异常声明的时候被抛出
- 关于文件读写操作中ios::app与ios::ate的区别
- hdu 1012 u Calculate e
- 9、multiple reactors + thread pool(one loop per thread + threadpool)(突发I/O与密集计算)
- 使用ContentResolver操作ContentProvider中的数据