3

好的,我在发布之前尽可能多地研究了这个,所以我希望这不是一个转发,但是这里有......

我做了一个数据表,假设它有一个名为 "cartype" 的列,然后我添加了一个名为 "color" 的列

好吧,我绑定了一个gridview,我想要做的是使用一个标签,并让它的FORECOLOR 成为“颜色”列中的值。

我试过这个:

<asp:BoundField DataField="cartype" HeaderText="Cars"  ItemStyle-Width="130" ItemStyle-ForeColor='<% Eval("Color") %>' />

但我有一个错误

“无法从 'ForeColor' 属性的字符串表示 '<%Eval("color")%>' 创建 System.drawing.color 类型的对象。

我也尝试添加一个模板字段并得到相同的结果。

我试图不使用 rowdatabound 事件并使用 .Cells[3] ,因为当我添加列时,它将更改单元格编号,并切换所有内容!我希望我可以通过将颜色与数据绑定来使其更清晰。

4

3 回答 3

2

好吧,我最终这样做了。伤心:(

在我的网格的 VERY END 我添加了一个 ASP:Hidden 模板字段

<asp:TemplateField>
  <ItemTemplate>
   <asp:HiddenField ID="hColor" runat="server" Value='<%# Eval("Color") %>'/>
  </ItemTemplate>
</asp:TemplateField>

然后在 RowDataBoundEvent 我这样做了

Dim hid As HiddenField
hid = e.Row.FindControl("hColor")
If (hid.Value <> Nothing) Then
   e.Row.Cells(1).ForeColor = System.Drawing.ColorTranslator.FromHtml("#" + hid.Value)
End If

PS。我喜欢 C#。不喜欢 VB.NET。哈哈 :)

于 2013-01-30T16:48:25.307 回答
1

你有没有尝试过:

 ForeColor='<%# System.Drawing.Color.FromName(Eval("Color")) %>'

?

于 2013-01-30T02:07:57.727 回答
0

错误的原因是运行时期望 ForeColor 的值是颜色,而不是字符串。运行时无法从字符串“Red”创建“Red”。

您可以使用以下示例在代码后面创建一个函数来解决您的问题.. 函数将接受字符串颜色值并返回系统颜色。同样在填充gridview之前,您可以将颜色列存储在arraylist中并使用该arraylist返回系统颜色。不是最好的方法,但想不出别的。

 ForeColor='<%# Convert.ToString(Eval("Color")) == "Blue" ? System.Drawing.Blue>
于 2013-01-30T01:50:38.017 回答