原本是用GridView的BoundField属性展示列,现在因为需要增加删除和编辑GridView的行,改为TemplateField展示。但是原来部分更改单元格颜色的代码失效了,找不到原因。
原来的前端代码:
<asp:GridView ID="grid_01" runat="server" OnRowDataBound="grid_01_RowDataBound" AutoGenerateColumns="False" Width="100%" Font-Names="Arial" AllowSorting="True">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="col1" ShowHeader="true" HeaderText="col1" ReadOnly="true"
ItemStyle-HorizontalAlign="center" HeaderStyle-BackColor="SkyBlue" />
<asp:BoundField DataField="col2" ShowHeader="true" HeaderText="col2" ReadOnly="true"
ItemStyle-HorizontalAlign="center" HeaderStyle-BackColor="SkyBlue" />
<asp:BoundField DataField="col3" ShowHeader="true" HeaderText="col3" ReadOnly="true"
ItemStyle-HorizontalAlign="center" HeaderStyle-BackColor="SkyBlue" />
<asp:BoundField DataField="col4" ShowHeader="true" HeaderText="col4" ReadOnly="true"
ItemStyle-HorizontalAlign="center" HeaderStyle-BackColor="SkyBlue" />
</Columns>
</asp:GridView>
更改后前端代码:
<asp:GridView ID="grid_01" runat="server" OnRowDataBound="grid_01_RowDataBound" AutoGenerateColumns="False" Width="100%" Font-Names="Arial" AllowSorting="True">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="true" HeaderText="col1" HeaderStyle-BackColor="SkyBlue"
ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Label ID="lbl_col1" runat="server" Text='<%# Eval("col1") %>'></asp:Label>
<asp:TextBox ID="gv_tb_col1" runat="server" Text='<%# Eval("col1") %>' Visible="false" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="true" HeaderText="col2" HeaderStyle-BackColor="Silver">
<ItemTemplate>
<asp:Label ID="lbl_col2" runat="server" Text='<%# Eval("col2") %>'></asp:Label>
<asp:TextBox ID="gv_tb_col2" runat="server" Text='<%# Eval("col2") %>' Visible="false" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="true" HeaderText="col3" HeaderStyle-BackColor="Silver">
<ItemTemplate>
<asp:Label ID="lbl_col3" runat="server" Text='<%# Eval("col3") %>'></asp:Label>
<asp:TextBox ID="gv_tb_col3" runat="server" Text='<%# Eval("col3") %>' Visible="false" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="true" HeaderText="col4" HeaderStyle-BackColor="Silver">
<ItemTemplate>
<asp:Label ID="lbl_col4" runat="server" Text='<%# Eval("col4") %>'></asp:Label>
<asp:TextBox ID="gv_tb_col4" runat="server" Text='<%# Eval("col4") %>' Visible="false" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
后台更改颜色代码:
protected void grid_01_RowDataBound(object sender, GridViewRowEventArgs e) {
DataRowView drv = (DataRowView)e.Row.DataItem;
if (e.Row.RowType == DataControlRowType.DataRow) //不包括第一行表头
{
if (e.Row.Cells[1].Text == "Y")
{
e.Row.Cells[1].Attributes.Add("style", "background-color:DodgerBlue ");
}
if (!string.IsNullOrEmpty(drv["number"].ToString())) //单元格不为空
{
if (int.Parse(e.Row.Cells[2].Text) < 0)
{
e.Row.Cells[2].Attributes.Add("style", "color:red ");
}
}
Response.Write(e.Row.Cells[4].Text);
if (!string.IsNullOrEmpty(drv["x"].ToString()) && !string.IsNullOrEmpty(drv["y"].ToString())) //单元格不为空
{
if (DateTime.Compare(Convert.ToDateTime(e.Row.Cells[4].Text), Convert.ToDateTime(e.Row.Cells[3].Text)) > 0) //y大于x
{
e.Row.Cells[4].Attributes.Add("style", "color:red ");
}
}
}
}
代码太长,这里做了简化处理,更改前端代码后,col1和col2的颜色能更改,col1值是Y或N,col2值是整数。
但是日期型就不行了,col3,col4都是日期,前端数据正常展现,Response就获取不到值了,没有东西打印出来,更改颜色更不行,报格式错误。而用原来的前端代码是可以取出日期数据的,实在是奇怪。