我是用sqldatasource与GridView绑定,然后实现了标题列排序和分页等功能.现在,我想给GridView多加了一列..这列与数据库完全无关,就是为每行生成3位数的随机数,现在,我现在实现..这列,点击标题列,可以为这行排序..能够做到呢?
解决方案 »
- 下面的with ties * 是什么意思啊
- 请问winform用IrisSkin2换肤后,窗体内所有控件(如:按钮,Label等)的字体颜色都无法改变了,why?
- Outlook2003 发邮件(A program is trying to access e-mail addresses you have stored in Outlook)
- 如何更新Excel文件中的某个特定单元格啊?
- 在xp上做开发,放到win2k上没任何问题,但是放在win2k3下页面上出现了几个乱码如何解决?
- progressBar1进度条的问题
- HELP ME 我用jmail4.3接收邮件老出现这样的问题提示:This function is not included in this version of jmail
- 实现语音聊天,请指点
- 首次打开页面很慢,关闭再次打开页面加载很快了,是什么原因造成的呢?
- MybatisNet 为什么很少更新,十分困惑
- 将页面导出为word后,比例缩放的问题
- Respond.write()方法
DataView dv = ds.Tables[0].DefaultView; dv.Sort = "数据库中的字段 desc/acs";//在你的GridView 的列上用按钮控制 这个Sort
GridView gv = new GridView();
gv.DataSource = dv;
gv.DataBind();
或者说参考: PowerTable (在网上下载)
<%@ page language="c#"%><!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
"http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"><script runat="server">
// 计算数据,完全可以从数据看取得
icollection createdatasourcebyxianhuimeng()
{
system.data.datatable dt = new system.data.datatable();
system.data.datarow dr;
dt.columns.add(new system.data.datacolumn("学生班级", typeof(system.string)));
dt.columns.add(new system.data.datacolumn("学生姓名", typeof(system.string)));
dt.columns.add(new system.data.datacolumn("语文", typeof(system.decimal)));
dt.columns.add(new system.data.datacolumn("数学", typeof(system.decimal)));
dt.columns.add(new system.data.datacolumn("英语", typeof(system.decimal)));
dt.columns.add(new system.data.datacolumn("计算机", typeof(system.decimal))); for (int i = 0; i < 8; i++)
{
system.random rd = new system.random(environment.tickcount * i); ;
dr = dt.newrow();
dr[0] = "班级" + i.tostring();
dr[1] = "【孟子e章】" + i.tostring();
dr[2] = system.math.round(rd.nextdouble() * 100, 2);
dr[3] = system.math.round(rd.nextdouble() * 100, 2);
dr[4] = system.math.round(rd.nextdouble() * 100, 2);
dr[5] = system.math.round(rd.nextdouble() * 100, 2);
dt.rows.add(dr);
}
system.data.dataview dv = new system.data.dataview(dt);
return dv;
} // 设置每页显示的行数
int totalrowcount = 12;
// 自动填充的行数
int numcount = 0;
protected void page_load(object sender, eventargs e)
{
if (!page.ispostback)
{
gridview1.datasource = createdatasourcebyxianhuimeng();
gridview1.databind();
}
} protected void gridview1_rowdatabound(object sender, gridviewroweventargs e)
{
if (e.row.rowtype == datacontrolrowtype.datarow)
{
// 计算自动填充的行数
numcount++;
}
if (e.row.rowtype == datacontrolrowtype.footer)
{
// 计算完毕,在此添加缺少的行
int toleft = totalrowcount - numcount;
int numcols = gridview1.rows[0].cells.count; for (int i = 0; i < toleft; i++)
{
gridviewrow row = new gridviewrow(-1, -1, datacontrolrowtype.emptydatarow, datacontrolrowstate.normal);
for (int j = 0; j < numcols; j++)
{
tablecell cell = new tablecell();
cell.text = " ";
row.cells.add(cell);
}
gridview1.controls[0].controls.addat(numcount + 1 + i, row);
}
}
}
</script><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>自动填充固定行数的 gridview</title>
</head>
<body>
<form id="form1" runat="server">
<asp:gridview id="gridview1" runat="server" onrowdatabound="gridview1_rowdatabound"
font-size="12px" cellpadding="3">
<headerstyle backcolor="#ededed" />
<columns>
<asp:templatefield headertext="模版列">
<itemtemplate>
<%#eval("学生姓名") %>
</itemtemplate>
</asp:templatefield>
</columns>
</asp:gridview>
</form>
</body>
</html>
据我所了解,想完成你目前的功能,只有通过手动的调用 SqlDataSourceID1.Select 方法来获取 DataView 进而获取DataTable并添加列,
再手动绑定 GridView1.DataSource 上,
并且手动实现 Sorting 事件关于如何绑定大概如下 protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataView dv = (SqlDataSource1.Select(DataSourceSelectArguments.Empty) as DataView);
DataTable dt = dv.Table;
dt.Columns.Add("Random_Number");
Random r = new Random(512);
foreach (DataRow row in dt.Rows)
{
row["Seed"] = r.Next();
}
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
2.
假如你原来的代码是通过直接设置 GridView1.DataSourceID = SqlDataSourceID1
那么你回发现用 1 的方法工作量就大了,
相对来说,你可能更喜欢直接再 Database Select 的时候加入 那一列随机数,比如 SQL Server 你可使用 RAND 函数生成随机数,具体请参考联机文档SELECT *, RAND() Random_Number FROM MyTable