紧急呼救:datagrid动态绑定模板列、绑定列后出现的问题,内有详细代码,up有分

火电 2005-01-14 12:44:40
声明一下:datagrid控件在html页面中只有一列
<asp:datagrid id="ExportGrid" style="Z-INDEX: 102" runat="server" Width="100%" GridLines="Vertical"
AutoGenerateColumns="False" PageSize="15">
<AlternatingItemStyle CssClass="gridEvenRow"></AlternatingItemStyle>
<ItemStyle CssClass="gridOddRow"></ItemStyle>
<HeaderStyle CssClass="gridHead" VerticalAlign="Middle"></HeaderStyle>
<Columns>
<asp:TemplateColumn Visible="False" HeaderText="模板列"></asp:TemplateColumn>
</Columns>
<PagerStyle Visible="False"></PagerStyle>
</asp:datagrid>



本人通过如下函数的方法加入了模板列和绑定列

private void AddBoundColumnToGrid(string strHeaderText,bool bWrap,int iHeaderWidth,string strDataField,bool bVisible,int iColumnIndex,DataGrid objGrid)
{
BoundColumn dc = new BoundColumn();
dc.HeaderText = strHeaderText;
dc.HeaderStyle.Wrap = bWrap;
dc.HeaderStyle.Width = Unit.Parse(iHeaderWidth.ToString() + "%");
dc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
dc.HeaderStyle.VerticalAlign = VerticalAlign.Middle;
dc.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
dc.ItemStyle.VerticalAlign = VerticalAlign.Middle;
dc.DataField = strDataField;
dc.Visible = bVisible;
dc.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
objGrid.Columns.AddAt(iColumnIndex,dc);
}

private void AddTemplateColumnToGrid(DataGrid objGrid,int iColumnIndex,
string headtype,string headid,string headinfo,
string itemtype,string itemid,string iteminfo)
{
TemplateColumn tc = new TemplateColumn();
tc.HeaderTemplate = new DataGridTemplates.CTemplateColumn(headtype,headid,true,headinfo);
tc.ItemTemplate = new DataGridTemplates.CTemplateColumn(itemtype,itemid,false,iteminfo);
tc.HeaderStyle.Width = Unit.Parse("10%");
tc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
tc.HeaderStyle.VerticalAlign = VerticalAlign.Middle;
tc.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
tc.ItemStyle.VerticalAlign = VerticalAlign.Middle;
objGrid.Columns.AddAt(iColumnIndex,tc);

}


其中的 类 DataGridTemplates.CTemplateColumn 就是继承 ITemplate 类的一个接口,控制模板列中增加何种控件

然后绑定数据后这个时候都没有问题,在 ItemDataBound 事件中都可以获取到绑定到列上的值
但是问题出现在点击模板列上的linkbutton(是通过模板列生成的)时候,没有任何事件触发并且
datagrid上绑定的数据不见了,只是做了向服务端提交的功能,我是想通过点击某一列上的linkbutton
然后进入到该按钮的事件中,把每行中的隐藏列中的数据读取出来

注意:我还不想在html页面中把要显示的列都写死,我想所有要显示的列都灵活读取。
谁帮忙解决一下问题,

还有,在 ItemDataBound 事件中我使用
((LinkButton)e.Item.Cells[7].FindControl("btnShowInfo")).Click += new System.EventHandler(this.ShowInfoClick);没有反应进入不到 ShowInfoClick 函数

在ItemCommand 事件中如果写
但是这个时候 Cells[7] 还没有生成,还是取不到

帮忙啊,急用!!!
...全文
291 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
powbcom 2005-01-14
  • 打赏
  • 举报
回复
估计是要在
if(!Page.IsPostBack) 中进行数据绑定!
jackie615 2005-01-14
  • 打赏
  • 举报
回复
up
goody9807 2005-01-14
  • 打赏
  • 举报
回复
如果你需要结合更多的字段在同一个列中显示,模板列是唯一的方法。如果你需要对某个单元格应用一种特殊的格式,你最好就用datagrid的ItemCreated 事件或者ItemDataBound事件。例如,如果你要改变某个单元格的背景色,或者你要根据某种条件来对单元格应用其它的样式表,你可以在ItemCreated的处理事件中,确定正在创建的项(item)是你需要处理的类型(item 或者AlternatingItem类型),然后应用新的或已存在的样式表。在ItemCreated事件触发时,仍不能保证那一项(item)已经绑定了数据。通过ItemCreated事件的参数e的dataitem属性可以得到触发该事件的datagriditem对象。对于datagrid的ItemCreated事件,它的事件参数是DataGridItemEventArgs类型:
void ItemCreated(Object sender, DataGridItemEventArgs e)
e.Item.DataItem的值在项被创建时根据数据源的不同赋予不同值。如果datagrid绑定的是一个datatable,那么DataItem就是一个DataRow对象。正如我刚才所说,虽然大多数情况下数据绑定(data binding)事件在ItemCreated触发时还没有触发。但实际上,数据绑定事件(data binding)通常发生在ItemDataBound事件触发时。这个规则只有一种情况下例外,就是在基于模板的列中。一个模板列不止能绑定数据源中的某个字段;它还能访问整个的数据源。这使我们可以在ItemCreated事件中做一些处理工作,而不必等ItemDataBound事件触发,因为itemdatabound事件在ItemCreated事件之后触发。对于bound、button以及 hyperlink列,你可能需要ItemDataBound事件来获得datagrid将要显示的数据绑定的文字。

模板列的头
既然TemplateColumn类给了HeaderTemplate(FooterTemplate)属性,你就可以定制给定列的头(header)和尾(footer)。说到定制,它在这里是非常重要的一点。因为在普通的数据绑定列中没有header模板和footer模板。HeaderTemplat只能应用在TemplateColumn 类的一个实例中。对于这个实例,如果你想用一个非标准的方法编辑该列的内容(例如说你想添加对内容的验证),你可以用headertemplate,也可以用一个简单的BoundColumn类来呈现。
真的可以改变列的header布局吗?如果你需要根据某个表达式对列进行排序,排序机制是datagrid自动在列的头部插入一个hyperlink控件,当用户单击hyperlink控件时,asp.net会根据hyperlink控件的href属性触发一个回发事件,从而对该列进行排序操作。就算你不需要排序你也可以很自由的更改列的header。如果你需要用ItemCreated事件在header中增加其它的控件及脱离datagrid控件做其它的任何事情。下面请看一个例子:
Figure 3 Adding the Sort Dropdown
public void ItemCreated(Object sender, DataGridItemEventArgs e)
{
ListItemType lit = e.Item.ItemType;
if (lit == ListItemType.Header)
{
// Create and fill a dropdown list control
DropDownList dd = new DropDownList();
dd.ID = "ddSort";
ListItem li1, li2, li3;

// ListItem constructor takes Text and Value for the item
li1 = new ListItem("Title of courtesy", "titleofcourtesy");
dd.Items.Add(li1);

li2 = new ListItem("Last Name", "lastname");
dd.Items.Add(li2);

li3 = new ListItem("First Name", "firstname");
dd.Items.Add(li3);

// Selects the item, if any, that was selected last time
dd.SelectedIndex = Convert.ToInt32(grid.Attributes["FieldIndex"]);

// Add the dropdown list to the header of the 2nd column
TableCell cell = (TableCell) e.Item.Controls[1];
cell.Controls.Add(dd);
}
}

public void SortCommand(Object sender, DataGridSortCommandEventArgs e)
{
// Code that retrieves the grid's data source GOES HERE
•••

// Sort by the specified expression or figure it out
if (e.SortExpression != "*")
dv.Sort = e.SortExpression;
else
{
// Retrieves the dropdown list control through its ID
DataGridItem dgi = (DataGridItem) e.CommandSource;
DropDownList dd = (DropDownList) dgi.FindControl("ddSort");

// Retrieves the sorting expression from the list
dv.Sort = dd.SelectedItem.Value;

// Persists the currently selected dropdown item
grid.Attributes["FieldIndex"] = dd.SelectedIndex.ToString();
}

// Refreshes the grid
grid.DataBind();
}
goody9807 2005-01-14
  • 打赏
  • 举报
回复
DataGrid的模板列
基于模板的列在datagrid控件中扮演了一个很重要的角色,它们允许你增加任意一种类型的列到datagrid,datagrid通过纯文本的形式或者某种预定义的列类型显示内容。然而,有时预定义的列类型并不能实现我们想要的东西。模板列有四种不同的模板,如图1
Figure 1 DataGrid Column Templates
Name Description
ItemTemplate Contains the template for the items in a DataGrid's column.
<ItemTemplate>
<asp:label runat="server" text= '<%# ... %>'...>
</ItemTemplate>
You can use any combination of HTML text and ASP.NET controls to populate the column.
EditItemTemplate Controls the contents of the item selected for editing in the column of the DataGrid control. Place the controls you need for editing the cell between the opening and closing EditItemTemplate tags.
<EditItemTemplate>
<asp:textbox runat="server" text= '<%# ... %>'...>
</EditItemTemplate>
HeaderTemplate Contains the template for the heading section.
<HeaderTemplate>
<asp:label runat="server" text= "Header"...>
</HeaderTemplate>
If you omit this template, the column header is rendered with a label or a hyperlink if sorting is enabled. By specifying a custom template, you make yourself responsible to provide the user interface needed to enable sorting on the column.
FooterTemplate Contains the template for the footer section of the column. The default value is a null reference.
<FooterTemplate>
<asp:label runat="server" text= "..."...>
</FooterTemplate>
The footer is displayed only if the ShowFooter property of the DataGrid is set to True.

你可能会频繁的使用模板列(ItemTemplate)。它定义了怎么样显示列中的单元格及由哪些元素组成控件的内容。HeaderTemplate 和 FooterTemplate我们就不说了,相信大家都知道是干什么用的。当列的所属行进入编辑模式时,EditItemTemplate属性指明单元格应该怎样变化。但要注意的是,它和datalist控件不一样,datagrid没有选中模板。
当你需要用不规范的方式显示整个列的时候,你的DataGrid应该用基于模板的列。如果你需要显示数据的数据无法用datagrid 提供的普通的模板显示时,这时,模板就是你的最佳选择了。

下面的代码演示了怎样绑定数据到datagrid控件的模板列。
<asp:TemplateColumn runat="server"
HeaderText="heading">
<itemtemplate>
...ASP.NET layout goes here...
</itemtemplate>
</asp:TemplateColumn>
注意模板列和其它类型的列一样,也有一个可用于排序的标题文字。模板列没有直接用于绑定数据源字段的属性。也就是在TemplateColumn类的成员里面,你找不到任何DataField或DataTextField属性。
缺少直接绑定数据源字段的属性是为了更灵活的处理列的显示布局。要呈现一个列,你可以用label控件的text属性,当然也可以用dropdownlist控件或者image控件,这两个控件都没有类似text的属性。结果一样,你都必须用一个数据绑定表达式来绑定数据。在我看来,虽然要写冗长的数据绑定表达式,但它却给了你极大的灵活性。
下面的代码片断演示怎样正确绑定内容到item template:
<asp:label runat="server"
Text='<%# DataBinder.Eval(Container.DataItem,
"lastname") %>'
/>
通过用DataBinder.Eval方法,你能够访问当前数据源的任何一个字段。除此以外,你还可以结合任何的排序表达式来对字段进行排序。这是用其它简单的模板列无法实现的。


Figure 2 Column

在图2中,你能看到一个基于模板列实现的例子,它演示了怎样在一列中显示数据源中两个字段。在不是基于模板的列中只能获得(显示)一个字段。这个模板的代码如下所示:
<itemtemplate>
<%#
"<b>" +
DataBinder.Eval(Container.DataItem, "lastname") +
"</b>, " +
DataBinder.Eval(Container.DataItem, "firstname")
%>
</itemtemplate>
brightheroes 2005-01-14
  • 打赏
  • 举报
回复
看你的问题,好像是点击按钮之后,动态生成的模板列啊绑定列啊什么的丢失了

你需要在Page_Load里面

放开那个if(!Page.IsPostBack)限制条件,否则肯定是Grid只有1列了
cuizhq0227 2005-01-14
  • 打赏
  • 举报
回复
做个记号
tengjian1981 2005-01-14
  • 打赏
  • 举报
回复
up
amendajing 2005-01-14
  • 打赏
  • 举报
回复
up
火电 2005-01-14
  • 打赏
  • 举报
回复
多谢 brightheroes(闭关|那一剑的风情) 地提醒

果然阿

我都老糊涂了

还有多谢 goody9807() 的热心

还有其他人

我再看看有没有问题

然后结铁
brightheroes 2005-01-14
  • 打赏
  • 举报
回复
什么意思?
datagrid 就取不到了
取不到什么了?
火电 2005-01-14
  • 打赏
  • 举报
回复
if(!Page.IsPostBack)

这个我去掉了还是不行啊

点击那个模板列中的按钮时 datagrid 就取不到了
标题SpringBoot中小学教育辅导系统设计与实现AI更换标题第1章引言介绍中小学教育辅导系统的研究背景、意义、现状以及论文的方法和创新点。1.1研究背景与意义分析当前中小学教育辅导的现状及系统开发的重要性。1.2国内外研究现状探讨国内外中小学教育辅导系统的发展现状与趋势。1.3研究方法以及创新点概述本文的研究方法,阐述系统的创新点。第2章相关理论介绍SpringBoot框架及教育辅导系统相关理论。2.1SpringBoot框架概述介绍SpringBoot框架的特点、优势及在系统开发中的应用。2.2教育辅导系统理论基础阐述教育辅导系统的基本理论,包括学习理论、教学理论等。2.3系统开发相关技术概述系统开发过程中涉及的其他关键技术,如数据库技术、前端技术等。第3章系统需求分析与设计对中小学教育辅导系统进行详细的需求分析与设计。3.1需求分析分析系统的功能需求、性能需求及用户需求。3.2系统架构设计设计系统的整体架构,包括前后端分离架构、模块划分等。3.3数据库设计设计系统的数据库结构,包括表结构、关系等。第4章系统实现详细介绍中小学教育辅导系统的实现过程。4.1开发环境搭建介绍系统开发所需的环境配置及工具选择。4.2功能模块实现阐述各个功能模块的实现过程,包括用户管理、课程管理、学习资源管理等。4.3系统测试与优化对系统进行测试,包括单元测试、集成测试等,并对系统进行优化。第5章系统应用与效果分析对中小学教育辅导系统的应用效果进行分析。5.1系统应用情况介绍系统在实际应用中的情况,包括用户反馈、使用数据等。5.2效果评估与分析从教学效果、用户体验等方面对系统进行评估与分析。5.3对比方法分析通过与传统教育辅导方式对比,凸显系统优势。第6章结论与展望总结中小学教育辅导系统的设计与实现成果,并展望未来的研究方向。6.1研究结论概括系统的主要功能、特点及创新点。6.2展望指出系统
内容概要:本文详细介绍了一种欠定盲源分离方法,并深入探讨其在模态识别中的应用,重点依托Matlab代码实现相关算法流程。该方法针对传感器数量少于源信号数量的“欠定”情形,通过稀疏表示、时频分析与独立成分分析(ICA)等核心技术,从混叠振动信号中高效分离出原始模态信号,进而提升结构模态参数识别的精度与鲁棒性。研究紧密结合工程实际,适用于复杂结构的振动分析、故障诊断与健康监测,为信号处理与结构动力学交叉领域提供了可复现的技术路径。; 适合人群:具备信号处理、线性代数及Matlab编程基础的研究生、科研人员与工程技术人员,尤其适合从事机械、土木、航空航天等领域中结构动力学分析与状态监测的相关工作者。; 使用场景及目标:① 掌握欠定盲源分离的基本理论与算法实现流程;② 将该方法应用于实际工程中的模态参数识别,如桥梁、风机叶片等大型结构的振动信号分离与故障特征提取;③ 借助提供的Matlab代码进行算法复现、性能测试与二次开发,服务于科研论文撰写、项目攻关或工业检测系统开发。; 阅读建议:建议读者结合理论推导与Matlab代码同步研读,重点关注信号混合模型构建、稀疏成分提取、时频掩膜设计及分离效果评估等关键环节,并尝试在真实或仿真数据集上进行实验验证与参数调优,以深入理解方法的适用边界与优化潜力。
源码链接: https://pan.quark.cn/s/3302e37bc21e 【热电偶测温机制】 热电偶作为一类普遍应用的温度感应装置,其运行机制依托于塞贝克现象,具体而言,当由两种不同金属或半导体材料A与B构成的闭合回路的两端存在温度梯度时,回路内部会感应出电压。该电压值与两个接点间的温差呈现正相关性。K型热电偶即为其中一种应用广泛的型号,该类型热电偶主要由镍铬(NiCr)以及镍铝(NiAl)合金构成,并展现出优良的一致性和精确度。 【MAX6675芯片概述】 MAX6675是由Maxim公司研发的一种高度集成的热电偶接口组件,该组件内嵌了冷端补偿及数字转换功能。它能够将热电偶产生的微弱电压信号转化为数字形式的数据,从而便于微控制器进行读取和运算处理。该芯片内部配置了12位Σ-Δ型模数转换器,能够提供高等级的温度测量精度,并且配备了SPI串行通信接口,有助于与各类微控制器设备进行顺畅的数据交换。 【C语言编程实践】 在采用C语言进行编程时,与MAX6675芯片进行交互一般遵循以下流程: 1. 进行SPI接口的初始化工作:设定SPI时钟的速率、操作模式以及数据传输的方向,以此确保与MAX6675的通信协议相吻合。 2. 发送指令以获取温度信息:经由SPI接口发送用于读取温度的指令,芯片将会反馈包含当前温度数值的12位二进制数据。 3. 实施数据解析操作:接收并分析返回的二进制数据,将其转化为具体的温度数值。值得注意的是,MAX6675所提供的温度数据为14位格式,其中包含两位用于表示符号位,剩余的12位则代表实际温度值。 4. 执行冷端温度补偿:由于热电偶所测量的是温度差值,因此还需考虑芯片自身的温度(即冷端温度),可以通过额外的温度感应装置或进行...

62,271

社区成员

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

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

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

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