给datagrid模板页里面的控件动态赋值
前两天做东西:需要把前台的文本编辑器里面的内容存到数据库然后取到后台做处理,问题是从文本编辑器存的数据都带有html标签(我们不能把这些标签给管理员看吧) 所以要处理一下。
首先我是直接的用datagrid绑定,绑定上去了html标签依然显示(很是奇怪以前也这么干过似乎是默认的就给换成的对应的格式了),看看直接绑定 <asp:BoundColumn DataField="cqcontent" HeaderText="内容"/> 里面没有找到html转码的属性(一句话直接的用<asp:BoundColumn/>无法解决 )。
想到用datalist可以在绑定字段的时候用HttpUtility.HtmlDecode()处理掉,但是无法达到其他的功能。
没法最后只得datagrid模板页里面放个lable控件然后动态的给其其赋值。
<asp:DataGrid id="dgContent" runat="server">
<Columns>
<asp:TemplateColumn HeaderText="内容">
<ItemTemplate>
<asp:Label ID="LabCqComment" runat="server" width="100%"></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
直接在对应的cs文件中声明一个protectd 的string变量然后写到lable中间去 html标签没了,但每次绑定的都是以个值,看看数据库,值都是最后一行。看来还是没有动态的绑定上去。
那就继续改吧,我们需要找到每个lable然后把对应的值给绑定上去。这样我们就必须先找到这个lable控件,用this.DGQcomment.Items[i].FindControl("LabCqComment")找到了,可是它是个Control对象,没用我们习惯的Text属性(需要强制转换为lable)。
实现代码如下:
首先我是直接的用datagrid绑定,绑定上去了html标签依然显示(很是奇怪以前也这么干过似乎是默认的就给换成的对应的格式了),看看直接绑定 <asp:BoundColumn DataField="cqcontent" HeaderText="内容"/> 里面没有找到html转码的属性(一句话直接的用<asp:BoundColumn/>无法解决 )。
想到用datalist可以在绑定字段的时候用HttpUtility.HtmlDecode()处理掉,但是无法达到其他的功能。
没法最后只得datagrid模板页里面放个lable控件然后动态的给其其赋值。
<asp:DataGrid id="dgContent" runat="server">
<Columns>
<asp:TemplateColumn HeaderText="内容">
<ItemTemplate>
<asp:Label ID="LabCqComment" runat="server" width="100%"></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
直接在对应的cs文件中声明一个protectd 的string变量然后写到lable中间去 html标签没了,但每次绑定的都是以个值,看看数据库,值都是最后一行。看来还是没有动态的绑定上去。
那就继续改吧,我们需要找到每个lable然后把对应的值给绑定上去。这样我们就必须先找到这个lable控件,用this.DGQcomment.Items[i].FindControl("LabCqComment")找到了,可是它是个Control对象,没用我们习惯的Text属性(需要强制转换为lable)。
实现代码如下:
protected void DGQcomment_ItemDataBound(object sender, DataGridItemEventArgs e)
{
qcomment.Qid = Int32.Parse(Request.QueryString["QId"].ToString());
DataTable dt = QCommentCtr.Qcomment_GetQcommentByqid(qcomment);
if (dt != null && dt.Rows.Count != 0)
{
for (int i = 0; i < this.DGQcomment.Items.Count; i++)
{
((Label)this.DGQcomment.Items[i].FindControl ("LabCqComment")).Text=HttpUtility.HtmlDecode(dt.Rows[i]["cqcontent"].ToString());
}
}
}
我要的结果就出来了