我有一个gridview
,其中某些行基于其中一列的值设置为BackColor
。
ASPX
<asp:GridView ID="uxTktGridView" runat="server" ShowHeaderWhenEmpty="true" CssClass="GridView" BorderStyle="Solid" onRowDataBound="uxTktGridView_RowDataBound" AutoGenerateColumns="False" OnSorting="uxTktGridView_Sorting" BackColor="White" BorderColor="#D6D2D2" BorderWidth="1px" CellPadding="3" SelectedIndex="-1" DataKeyNames="Ticket Number" AllowSorting="True" Font-Size="Small" Width="100%" Visible="True" EnableModelValidation="True" style=" margin-top: 10px; margin-bottom: 10px;" OnSelectedIndexChanged="uxTktGridView_SelectedIndexChanged1" EnableViewState="true">
<Columns>
<asp:CommandField ShowSelectButton="True" SelectText="Details" ButtonType="Button" HeaderText="Select" />
<asp:BoundField DataField="Ticket Number" HeaderText="Ticket Number" SortExpression="Ticket Number" />
<asp:BoundField DataField="Date Of Request" HeaderText="Date Of Request" SortExpression="Date Of Request" />
<asp:BoundField DataField="Requestor Name" HeaderText="Requestor Name" SortExpression="Requestor Name" />
<asp:BoundField DataField="Requestor State" HeaderText="Requestor State" SortExpression="Requestor State" />
<asp:BoundField DataField="Complexity" HeaderText="Complexity" SortExpression="Complexity" />
<asp:BoundField DataField="Nature of Inquiry" HeaderText="Nature of Inquiry" SortExpression="Nature of Inquiry" />
<asp:BoundField DataField="Staff" HeaderText="Staff" SortExpression="Staff" />
<asp:BoundField DataField="Ticket Status" HeaderText="Ticket Status" SortExpression="Ticket Status" />
<asp:BoundField DataField="Ticket Closure Date" HeaderText="Ticket Closure Date" SortExpression="Ticket Closure Date" />
</Columns>
<FooterStyle BackColor="White" ForeColor="#000066" />
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<RowStyle ForeColor="#000066" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#007DBB" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#00547E" />
</asp:GridView>
要设置BackColor
,我在后端使用_RowDataBound
函数:
C#
protected void uxTktGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
DataRowView drv = (DataRowView)e.Row.DataItem;
DateTime currentDate = DateTime.UtcNow.Date;
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (drv != null)
{
for (int i = 1; i < uxTktGridView.Columns.Count; i++) //index starts with 1 because the first column in the "select" button.
{
if (e.Row.Cells[8].Text.Equals("OPEN"))
{
string tier = e.Row.Cells[5].Text.ToString();
string date = e.Row.Cells[2].Text.ToString();
DateTime recordDate = Convert.ToDateTime(date, CultureInfo.InvariantCulture);
int measureDate = (currentDate.Date - recordDate.Date).Days;
if (tier == "1")
{
if (measureDate >= 20)
{
e.Row.BackColor = Color.FromName("#E56E94");
}
}
else if (tier == "2")
{
if (measureDate >= 30)
{
e.Row.BackColor = Color.FromName("#E56E94");
}
}
else if (tier == "3")
{
if (measureDate >= 35)
{
e.Row.BackColor = Color.FromName("#E56E94");
}
}
else if (tier == "4")
{
if (measureDate >= 40)
{
e.Row.BackColor = Color.FromName("#E56E94");
}
}
}
...
}
}
}
}
同一问题我有2个问题。如果是I,则1)单击一个按钮或2)单击其中的一行-网格变白并且不应用BackColor
设置。我猜这是一些与PostBack相关的问题。我尝试将AutoPostBack="false"
添加到按钮以及网格中。该行为仍然发生。我还尝试添加'EnableViewState =“ false” (based on a suggestion) to the
gridview . When I click a button, this basically makes my
gridview`消失。关于如何解决此问题的任何建议?
答案 0 :(得分:1)
了解WebForms中事件的顺序可能对此类事情最有帮助。出于示例的目的,页面和控件可以与事件名称互换。事件的顺序如下:
如果回发后不对网格进行数据绑定(最好在完成所有页面逻辑后在PreRender中调用DataBind())并且没有将EnableViewState
设置为true,那么您将迷失方向此信息发布在网格中,并且将无法在回发中访问它。 ViewState在Init和Load之间分配,并允许您访问控件的属性。如果您在DataBind()
中调用Page_Load
,则由于基础数据可能不同,因此控制事件可能会产生不可预测的结果。
换句话说,如果要使用定义的GridView,则至少对于GridView的EnableViewState必须为true。然后,您不应在回发
期间再次对其进行DataBindvoid Page_PreRender(object sender, EventArgs e)
{
if (!Page.IsPostback)
{
DataBind();
}
}
并且应该有效地保留状态。此外,请勿更改AutoPostBack
属性的值。