我遇到一种情况,我需要知道GridView的TemplateField中交替行的当前颜色。
更新:
如何在<%# ??? %>
中检索此颜色值。
(或者我得到行号的解决方法)。
答案 0 :(得分:1)
从&lt; %%&gt;内部获取颜色在模板字段本身中标记,您可以使用此代码...
<asp:TemplateField>
<ItemTemplate>
<%# ((GridViewRow)Container).RowState == DataControlRowState.Alternate ? ((GridView)((GridViewRow)Container).Parent.Parent).AlternatingRowStyle.BackColor : ((GridView)((GridViewRow)Container).Parent.Parent).RowStyle.BackColor%>
</ItemTemplate>
</asp:TemplateField>
您也可以在GridView的RowDataBound事件中执行此操作。在RowDataBound命令中,您可以查询e.Row.RowState以找出您所在的行类型。值包括DataControlRowState.Alternate和DataControlRowState.Normal。您可以使用发件人根据该行类型获取颜色...
protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
// set first cell in the row to color just for demonstration purpose.
if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Alternate)
{
e.Row.Cells[0].Text = ((GridView)sender).AlternatingRowStyle.BackColor.ToString();
}
}
答案 1 :(得分:1)
在您的代码隐藏页面(或.aspx页面的某个部分)中创建此功能:
protected string GetColor(object container)
{
int ordinal = 0;
try
{
ordinal = int.Parse(DataBinder.Eval(container, "DataItemIndex").ToString());
}
catch (Exception)
{
ordinal = int.Parse(DataBinder.Eval(container, "ItemIndex").ToString());
}
return (ordinal % 2) == 0 ? "Row" : "Alternate Row";
}
然后在你的标记中,你会这样称呼它:
<%# GetOrdinal(Container) %>
(注意大写的“容器”)。
答案 2 :(得分:1)
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Attributes.Add("style", "cursor:help;");
if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Alternate)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='orange'");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#E56E94'");
e.Row.BackColor = Color.FromName("#E56E94");
}
}
else
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='orange'");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='gray'");
e.Row.BackColor = Color.FromName("gray");
}
//e.Row.Cells[0].BackColor = Color.FromName("gray");
//e.Row.Cells[1].BackColor = Color.FromName("gray");
//e.Row.Cells[2].BackColor = Color.FromName("gray");
//e.Row.Cells[3].BackColor = Color.FromName("gray");
//e.Row.Cells[4].BackColor = Color.FromName("gray");
//e.Row.BorderWidth = 2;
//e.Row.BorderColor = Color.FromName("#43C6DB");
}
}
答案 3 :(得分:0)
这可能是一种奇怪的解决方法,但您可以随时检查您要检查的行是奇数行还是偶数行。如果是偶数,则可能使用AlternatingRow模板中设置的颜色。如果是偶数,则应该使用常规的Row模板。
答案 4 :(得分:0)
GridView如何改变颜色 - 每隔一行或X的块?或者它是以一种更“随机”的方式设置的?
如果是每隔一行,您只需检查该行是“正常”行还是“交替”行。
我不记得它是怎么写的,我只找到了这个VB的例子,但它可能会有所帮助:
If e.Row.RowState = DataControlRowState.Normal Then
//do stuff
ElseIf e.Row.RowState = DataControlRowState.Alternate Then
//do other stuff
其中e是GridView对象。但这并不会检查行的实际颜色。我想你应该能够做到这样的事情:
if(System.Drawing.Color.Red == e.Row.BackColor)
如果可以,请详细说明每行的颜色设置。