DataGridView,CS开发模式,有思路即可。1、如何固化某行色彩(某特定符合条件行,如某列信息为特定值)
不推荐使用CellFormatting事件(排序就要激发,数据量如果很大,判断会很罗嗦)
没有找到绑定行事件
如果对行进行设置,每次重新排序,信息就会丢失2、加入行号
行头中,如何设置行号?
不推荐使用CellFormatting事件(排序就要激发,数据量如果很大,判断会很罗嗦)
没有找到绑定行事件
如果对行进行设置,每次重新排序,信息就会丢失2、加入行号
行头中,如何设置行号?
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;namespace Costaco.CTN.Controls
{
public class DataGridView : System.Windows.Forms.DataGridView
{ public DataGridView()
{
}
//这里键入override,然后空格就会出来重写的列表,你选一个回车就可以了写出不同的override protected override void OnDataBindingComplete(DataGridViewBindingCompleteEventArgs e)
{
if (this.Rows.Count != 0)
{
for (int i = 0; i < this.Rows.Count; i++)
{
if ((i % 2) == 1)
{
this.Rows[i].DefaultCellStyle.BackColor = System.Drawing.Color.WhiteSmoke;
}
else
{
this.Rows[i].DefaultCellStyle.BackColor = System.Drawing.Color.LightBlue;
}
}
} base.OnDataBindingComplete(e);
}
}
}
通过继承原有的控件,直接实现交替颜色,也可以实现多行交替颜色。
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<%# this.DataGrid1.Items.Count + 1%>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>=================
AllowPaging="True"下
如果你DataGrid支持分页则可以如下【在翻页之后仍能维持数字继续编号】<asp:DataGrid id="DataGrid1" runat="server" AllowPaging="True">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<%# this.DataGrid1.CurrentPageIndex * this.DataGrid1.PageSize + Container.ItemIndex + 1%>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
这是datagird中的方法,你稍加修改就ok了。
我试过的。
主要考虑效率问题,这些我都大多试验过了,而且多行交替颜色,这个控件自己就有,何必单独去设置??如果不排序,就算在CellFormatting里面也没有问题,排序色彩是会丢失的。'RowPostPaint 切换窗口也会重绘
'CellFormatting 每次都要把所有的单元格判断一遍
'DataBindingComplete
问题集中在:排序、填充两种情况后,如何用最优的算法,进行色彩保留。
1、设置交替色,有默认的属性AlternatingRowsDefaultCellStyle可用,实在不知道你为什么要自己写呵;
2、设置符合条件的数据行样式(如符合条件前景色为红色)
在排序后,肯定会样式丢失的(还原为默认样式,但是交替色不丢的);采用行绘制刷新模式,经过测试,效率一般,不过总感觉别扭,每次进行窗体切换,都要激发。
采用数据绑定后绘制,会在排序后丢失。
不过麻烦在每次都要刷新——重复执行率太高了。
目前如果使用别人的控件,估计只能一个一个判断。
只刷新可见字段部份或许可以满足你的需求,重写某个事件,对当前可见的部分进行修改颜色。例如下面的代码
protected virtual void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.Value == null) return; foreach (DataGridViewColumn d in this.dataGridView.Columns) //为克服 DataGridView BUG (只刷新可见字段部份)
{
if (d.Name.IndexOf("IsStop") != -1)
{
if (this.dataGridView.Rows[e.RowIndex].Cells[d.Index].Value.ToString() == "是")
this.dataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Coral;
}
if (d.Name.IndexOf("IsDefault") != -1)
{
if (this.dataGridView.Rows[e.RowIndex].Cells[d.Index].Value.ToString() == "是")
this.dataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.YellowGreen;
}
if (d.Name.IndexOf("IsCurrent") != -1)
{
if (this.dataGridView.Rows[e.RowIndex].Cells[d.Index].Value.ToString() == "是")
this.dataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.BlueViolet;
}
}
}
对行,一般采用RowPostPaint事件
对于CS程序来说,很多时候刷新是不可避免的,不过一般情况下,效率还是可以的,不会很慢。
只有尽量设置条件来减少循环。最好是把控件重写来实现!
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
优惠接单开发,组件控件定制开发,成品源代码批发
联系方式:Q66840199 全天在线
==================================================================
没试过,不知这个办法是否可行
至于显示行号,不知道你需不需要分页。可以研究一下DataGridView的VirtualMode,应该是你想要的。
添加CellValueNeeded事件:
private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
//if(e.ColumnIndex是行号列)
e.Value = e.RowIndex + 1;
}
看看是不是要这个
下面是一段定义Repeater的前台代码:(我还给你注上说明哦!!!)
<table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#a0afc4">
<asp:Repeater ID="Repeater1" runat="server" //定义一个Repeater id是Repeater1
OnItemCommand="Repeater1_ItemCommand">
<HeaderTemplate> //列表第一行字段设置
<tr>
<td height="26" background="images/lmbg1.jpg"> </td>
<td align="center" background="images/lmbg1.jpg"><strong>ID </strong></td>
<td align="center" background="images/lmbg1.jpg"><strong>参数名</strong></td>
<td align="center" background="images/lmbg1.jpg"><strong>邮箱</strong></td>
<td align="center" background="images/lmbg1.jpg"><strong>手机</strong></td>
<td align="center" background="images/lmbg1.jpg"><strong>说明</strong></td>
<td align="center" background="images/lmbg1.jpg"><strong>设置该参数下的关键字</strong></td>
<td align="center" background="images/lmbg1.jpg"><strong>查看该参数的记录</strong></td>
</tr>
</HeaderTemplate> //第一行字段设置结束
<ItemTemplate> // 中间显示字段设置
<tr bgcolor="#FFFFFF"> //色彩设置
<td align="center" valign="top" ><a href="shujubj.aspx?id=<%# Eval("id") %>">编辑</a> <asp:LinkButton ID="LinkButton1" CommandName='<%# Eval("id").ToString()%>' runat="server" OnClientClick="return confirm('确定删除该参数?该参数下的关键词将一同删除');">删除</asp:LinkButton></td>
<td align="center" valign="top" > <%# DataBinder.Eval(Container.DataItem, "id") %></td>
<td align="center" valign="top" > <%# DataBinder.Eval(Container.DataItem, "username") %></td>
<td align="center" valign="top" > <%# DataBinder.Eval(Container.DataItem, "email")%></td>
<td align="center" valign="top" > <%# DataBinder.Eval(Container.DataItem, "mobile")%></td>
<td align="center" valign="top" > <%# DataBinder.Eval(Container.DataItem, "kehuming")%></td>
<td align="center" valign="top" ><a href="cssz.aspx?id=<%# Eval("id") %>">设置该参数下的关键字</a></td>
<td align="center" valign="top" ><a href="shujugl.aspx?id=<%# Eval("id") %>">敏感词检测清单</a></td>
</tr>
</ItemTemplate> //中间设置结束
<AlternatingItemTemplate> //中间交替行设置(和中间显示一样)
<tr bgcolor="#ecf3f9"> //交替颜色设置
<td align="center" valign="top" ><a href="shujubj.aspx?id=<%# Eval("id") %>">编辑</a> <asp:LinkButton ID="LinkButton1" CommandName='<%# Eval("id").ToString()%>' runat="server" OnClientClick="return confirm('确定删除该参数?该参数下的关键词将一同删除');">删除</asp:LinkButton></td>
<td align="center" valign="top" > <%# DataBinder.Eval(Container.DataItem, "id") %></td>
<td align="center" valign="top" > <%# DataBinder.Eval(Container.DataItem, "username") %></td>
<td align="center" valign="top" > <%# DataBinder.Eval(Container.DataItem, "email")%></td>
<td align="center" valign="top" > <%# DataBinder.Eval(Container.DataItem, "mobile")%></td>
<td align="center" valign="top" > <%# DataBinder.Eval(Container.DataItem, "kehuming")%></td>
<td align="center" valign="top" ><a href="cssz.aspx?id=<%# Eval("id") %>">设置该参数下的关键字</a></td>
<td align="center" valign="top" ><a href="shujugl.aspx?id=<%# Eval("id") %>">敏感词检测清单</a></td>
</tr>
</AlternatingItemTemplate> //中间交替设置结束
</asp:Repeater> //定义结束下面是分页设置:
<TR bgcolor="#FFFFFF">
<TD colSpan="8" height="30" align="center"><FONT class=contents><asp:linkbutton id="Fistpage" Runat="server" CommandName="0">首页</asp:linkbutton> <asp:linkbutton id="Prevpage" Runat="server" CommandName="prev">上一页</asp:linkbutton> <asp:linkbutton id="Nextpage" Runat="server" CommandName="next">下一页</asp:linkbutton> <asp:linkbutton id="Lastpage" Runat="server" CommandName="last">尾页</asp:linkbutton> 页次:<asp:label id="LCurrentPage" Runat="server" ></asp:label>/<asp:label id="LPageCount" Runat="server" ></asp:label>页 共有<font color="#FF0000"><asp:label id="LRecordCount" Runat="server" ForeColor="#ff0000"></asp:label></font>条信息</FONT>
跳页<asp:TextBox ID="gotoPage" Runat="server" Width="50px" MaxLength="5" AutoPostBack="True"></asp:TextBox>
</TD>
</TR>
</table>
本人学习时间不长,如有错误,请大家指正。
<%# DataBinder.Eval(Container.DataItem, "id") %> 是绑定id字段