读书人

用GridView实现孟子的DataGrid跨页多选

发布时间: 2012-01-22 22:38:43 作者: rapoo

用GridView实现孟子的DataGrid跨页多选,大家来看看错在哪里了。
Default.aspx:
<%@ Page Language= "C# " AutoEventWireup= "true " CodeFile= "Default.aspx.cs " Inherits= "_Default " %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">

<html xmlns= "http://www.w3.org/1999/xhtml " >
<head runat= "server ">
<title> GridView实现跨页多选 </title>
<script type= "text/javascript ">
function AddRemoveValues(oChk)
{
//在处理这个地方需要注意的是:你保存的值应该具有唯一性,这样才能不会替换错误的项。
if(oChk.checked)
document.getElementById( "HdnSelectedValues ").value += ", " + oChk.value;
else
document.getElementById( "HdnSelectedValues ").value = document.getElementById( "HdnSelectedValues ").value.replace( ", " + oChk.value, " ");
}
</script>
</head>
<body>
<form id= "form1 " runat= "server ">
<table align= "center " border= "1 ">
<tr>
<td align= "center ">
<asp:GridView ID= "GridView1 " runat= "server " AutoGenerateColumns= "False " CellPadding= "4 " ForeColor= "#333333 " GridLines= "None " AllowPaging= "True " OnPageIndexChanging= "GridView1_PageIndexChanging " OnRowCreated= "GridView1_RowCreated " OnRowDataBound= "GridView1_RowDataBound ">
<FooterStyle BackColor= "#990000 " Font-Bold= "True " ForeColor= "White " />
<RowStyle BackColor= "#FFFBD6 " ForeColor= "#333333 " />
<SelectedRowStyle BackColor= "#FFCC66 " Font-Bold= "True " ForeColor= "Navy " />


<PagerStyle BackColor= "#FFCC66 " ForeColor= "#333333 " HorizontalAlign= "Center " />
<HeaderStyle BackColor= "#990000 " Font-Bold= "True " ForeColor= "White " />
<AlternatingRowStyle BackColor= "White " />
<Columns>
<asp:TemplateField HeaderText= "选择 ">
<ItemTemplate>
<input type= "checkbox " runat= "server " id= "chkSelect " onclick= "AddRemoveValues(this) " value= ' <%# DataBinder.Eval(Container.DataItem, "id ")%> '/>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField= "id " HeaderText= "文章编号 " />
<asp:BoundField DataField= "Title " HeaderText= "文章标题 " />
<asp:BoundField DataField= "CreateDate " HeaderText= "文档创建时间 " />
</Columns>


</asp:GridView>
</td>
</tr>
<tr>
<td align= "center ">
<asp:Button ID= "Button1 " runat= "server " Text= "显示选中项的ID " OnClick= "Button1_Click " />
</td>
</tr>
<tr>
<td align= "center ">
<asp:TextBox ID= "HdnSelectedValues " runat= "server "> </asp:TextBox>
</td>
</tr>
<tr>
<td align= "left ">
<asp:label id= "Label1 " runat= "server "> </asp:label>
</td>
</tr>
</table>
</form>
</body>
</html>

Default.aspx.cs:
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{


GridViewDataBind();
}
}

protected void GridViewDataBind()
{
OleDbConnection conn = new OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + Server.MapPath( "aspx.mdb "));
OleDbDataAdapter oda = new OleDbDataAdapter( "SELECT id,Title,CreateDate from Document ", conn);
DataSet ds = new DataSet();
oda.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridViewDataBind();
}

protected void Button1_Click(object sender, EventArgs e)
{
// 为了方便显示,将隐藏域的“,”替换为“ <li> ”标记
Label1.Text = HdnSelectedValues.Text.Replace( ", ", " <li> ");
}

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (HdnSelectedValues.Text != " ")
{
//重新显示所选择的项目
if (HdnSelectedValues.Text.IndexOf(e.Row.Cells[1].Text) > = 0)
{
HtmlInputCheckBox ChkSelected = (HtmlInputCheckBox)(e.Row.Cells[0].FindControl( "ChkSelect "));
ChkSelected.Checked = true;
}
}
}
}

当记录那些id被选中的文本框得值不为空时,执行protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)会提示e.Row.Cells[1]下标越界,其Text为null,请问大家这是怎么回事。

[解决办法]
使用RowDataBound

读书人网 >asp.net

热点推荐