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;
}
}
}
}当执行到protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)事件时,e.Row.Cells[1]数组下标越界,请问大家怎么回事?
<%@ 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;
}
}
}
}当执行到protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)事件时,e.Row.Cells[1]数组下标越界,请问大家怎么回事?
比如说你的替换1,2,3,11,22,25
你简单的Replace的话2,与22,怎么区分,你没有涉及
还有就是字符串的开头、中间与结尾的替换方式不是一样的,你也没有做出处理...