以编程方式设置SkinID

时间:2015-12-14 08:11:13

标签: c# asp.net

我有 GridView 将数据显示为标签

<ItemTemplate>
     <asp:Label ID="lblIsActive" runat="server" Text='<%# GetIcon((String)Eval("IS_ACTIVE"))%>' SkinID='<%# GetSkinId((String)Eval("IS_ACTIVE"))%>' />
</ItemTemplate>

C#

protected string GetSkinId(string name)
    {
        if (name == "Y")
        {
            return "sknActive";
        }
        else
            return "sknInactive";
    }

但是我收到错误我无法设置SkinID以编程方式,我知道如何在代码中允许SkinID

更新 我决定不制作SkinID,所以我正在做这个

<ItemTemplate>
   <asp:Label ID="lblIsActive" runat="server" Text='<%# GetIcon((String)Eval("IS_ACTIVE"))%>' 
              ForeColor='<%# GetColor((String)Eval("IS_ACTIVE"))%>' />
</ItemTemplate>

我在c#上的功能获得颜色

protected string GetColor(string name)
{
    if (name == "Y")
    {
        return "#99099";
    }
    else
        return "#03211";
}

我收到错误

  

字符串无法转换为System.Drawing

2 个答案:

答案 0 :(得分:1)

错误消息告诉您需要执行的操作:将SkinID属性的初始化移至page lifecyclePage_PreInit阶段。

基本上,这需要在后面的代码中添加以下事件处理程序:

protected void Page_PreInit(object sender, EventArgs e)
{
    lblIsActive.SkinId = GetSkinID(IS_ACTIVE); // no need for eval here
}

答案 1 :(得分:1)

错误消息是不言自明的。基于数据源,您可以动态地创建gridview中的控件,然后尝试设置 SkinId 属性,从而设置错误。

您可以在gridview中创建行时实现此目的。是的,你可以像这样使用gridvew的RowCreated事件: -

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label lblIsActive = e.Row.FindControl("lblIsActive") as Label;
        if(lblIsActive.Text == "Y")
            lblIsActive.SkinID = "sknActive";
        else
            lblIsActive.SkinID = "sknInactive";
    }
}

请注意,不会RowDataBound事件中工作,因为在创建行并且数据行绑定到数据后会触发此事件。

<强>更新

首先,你的假设是错误的,我们循环实际上我们不是。我们只是处理gridview控件引发的事件。无论如何,从现在开始你已经改变主意并切换到ForeColor接近你的代码的问题是ForeColor属性需要一个System.Drawin.Color枚举但你传递一个字符串因此错误。对于correctint,您必须返回Color而不是像这样的字符串: -

protected Color GetColor(string name)
{
   if (name == "Y")
       return  Color.Red;
   else
       return Color.Green;
 }

这里我将返回样本颜色,但您需要将它们替换为实际的预期颜色。如果您只有十六进制字符串且不确定Color枚举值,那么您可以使用this answer中提到的方法来执行此操作。