读书人

关于跨页面多选的有关问题(很奇怪)

发布时间: 2012-02-07 17:45:36 作者: rapoo

关于跨页面多选的问题(很奇怪)
曾看过孟子写的关于“跨页面多选的问题”一文,今又在一书上看到同样一文,例子是一样的只是数据库改啦!(不知改的是否有问题)现将代码和问题帖出来,请大家帮忙看看!
---------------------------------------
<%@ 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>
<style type= "text/css ">
* {FONT-SIZE:12PX}
#Status {text-align:left}
</style>
<script language= "javascript " type= "text/javascript ">
function AddRemoveValues(oChk) {
//确定保存的值具有唯一性,这样才能不会替换错误的项。
if(oChk.checked)
from1.Hselcet.value += ", " + oChk.value;
else
from1.Hselcet.value = from1.Hselcet.value.replace( ", " + oChk.value, " ");
}
</script>

</head>
<body>
<form id= "from1 " runat= "server ">
<div style= "text-align:center ">
<div id= "Status ">
</div>
<table border= "1 " cellpadding= "0 " cellspacing= "0 ">
<tr>
<td style= "text-align: center ">
跨页面多选 </td>
</tr>
<tr>
<td style= "text-align: center ">
<asp:GridView id= "GridView1 " HorizontalAlign= "Center " AutoGenerateColumns= "False "
AllowPaging= "True " runat= "server " PageSize= "5 " OnPageIndexChanging= "GridView1_PageIndexChanging " OnRowDataBound= "GridView1_RowDataBound " Width= "472px ">
<HeaderStyle BackColor= "#AAAADD " Font-Bold= "True " HorizontalAlign= "Center "> </HeaderStyle>
<PagerStyle HorizontalAlign= "Right "> </PagerStyle>
<Columns>
<asp:TemplateField HeaderText= "选择 ">
<ItemTemplate>
<input type= "checkbox " runat= "server " id= "cbSelect " onclick= "AddRemoveValues(this) "


value= ' <%#DataBinder.Eval(Container.DataItem, "学生姓名 ")%> '/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText= "学生ID ">
<ItemTemplate>
<asp:Literal Text= ' <%# DataBinder.Eval(Container.DataItem, "学生ID ") %> ' runat= "server " ID= "ltID "/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText= "学生姓名 ">
<ItemTemplate>
<asp:Literal ID= "ltName " Text= ' <%# DataBinder.Eval(Container.DataItem, "学生姓名 ")%> ' runat= "server "/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText= "学生性别 ">
<ItemTemplate>
<asp:Literal Text= ' <%# DataBinder.Eval(Container.DataItem, "学生性别 ") %> ' runat= "server " ID= "ltSex "/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText= "入校时间 ">
<ItemTemplate>
<asp:Literal Text= ' <%# DataBinder.Eval(Container.DataItem, "入校时间 ") %> ' runat= "server " ID= "ltTime "/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
<tr>
<td style= "text-align: center ">
<asp:button id= "Button1 " runat= "server " Text= "得到所选的值 " OnClick= "Button1_Click "> </asp:button>
<input id= "Hselcet " type= "hidden " name= "Hselcet " runat= "server " /> </td>
</tr>
<tr>
<td style= "text-align: center ">
<table>
<tr>
<td style= "text-align:left; ">


<asp:label id= "Label1 " runat= "server "> </asp:label> </td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
--------------------------------------
using System;
using System.Data;
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;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!IsPostBack)
{
bind();
}
}
private void bind()
{
SqlConnection sqlcon = new SqlConnection( "Data Source=(local);Database=db_04;Uid=sa;Pwd= ");
SqlDataAdapter myda = new SqlDataAdapter( "Select ID as 学生ID,Name as 学生姓名,Sex as 学生性别,JoinTime as 入校时间 from tb_Student ", sqlcon);
DataSet myds = new DataSet();
myda.Fill(myds);
GridView1.DataSource = myds;
GridView1.DataBind();
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//重新显示所选择的项目
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (Hselcet.Value.IndexOf(((Literal)e.Row.Cells[1].FindControl( "ltName ")).Text) > = 0)


{
HtmlInputCheckBox hicbox = (HtmlInputCheckBox)(e.Row.Cells[0].FindControl( "cbSelect "));
hicbox.Checked = true;
}
}
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
bind();
}
protected void Button1_Click(object sender, EventArgs e)
{
//为了显示的方便进行替换的
Label1.Text = Hselcet.Value.Replace( ", ", " <li> ");
}
}
-------------------------------------
问题出现在这段代码:
if (Hselcet.Value.IndexOf(((Literal)e.Row.Cells[1].FindControl( "ltName ")).Text) > = 0)

HtmlInputCheckBox hicbox = (HtmlInputCheckBox)(e.Row.Cells[0].FindControl( "cbSelect "));

奇怪的是 Id为 "ltName " 的控件并不是放在Cells[1]里而是Cells[2]里的但他依然可以找到这个控件而且程序能够正确运行。
于是我尝试这把上面的两个改为e.Row.Cells[0],e.Row.Cells[1],e.Row.Cells[2],e.Row.Cells[3],e.Row.Cells[4]
它依然运行正确,我实在是不解啦!有谁能给我解释一下吗?

[解决办法]
呵呵!没遇到过帮LZ 顶下!

读书人网 >asp.net

热点推荐