logo

关于 跨页面实现多选 的评论:

评论日期:2007年04月23日 00:00:00 评论人:likey
我照着上面的例子做,为何会提示if(HdnSelectedValues.Value.IndexOf(((Literal)e.Item.Cells[0].FindControl("chkSelect")).Text) >= 0 )未将对象引用设置到对象的实例
下面分别是HTML代码和ASPX代码,
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="datagrid.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<script language="JAVASCRIPT">
function AddRemoveValues(oChk) { 
//在处理这个地方需要注意的是:你保存的值应该具有唯一性,这样才能不会替换错误的项。
if(oChk.checked)
Form1.HdnSelectedValues.value += "," + oChk.value; 
else
Form1.HdnSelectedValues.value = Form1.HdnSelectedValues.value.replace("," + oChk.value,""); 
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<asp:button id="Button1" style="Z-INDEX: 102; LEFT: 168px; POSITION: absolute; TOP: 320px" runat="server"
Text="Button"></asp:button><asp:panel id="Panel1" style="Z-INDEX: 103; LEFT: 8px; POSITION: absolute; TOP: 88px" runat="server"
Width="192px" Height="72px">
<asp:DataGrid id="DataGrid1" runat="server" Width="640px" Height="176px" AllowPaging="True" PageSize="3"
AutoGenerateColumns="False" CellPadding="4" BackColor="White" BorderWidth="1px" BorderStyle="None"
BorderColor="#3366CC">
<SelectedItemStyle Font-Bold="True" ForeColor="#CCFF99" BackColor="#009999"></SelectedItemStyle>
<ItemStyle Height="20px" ForeColor="#003399" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#CCCCFF" BackColor="#003399"></HeaderStyle>
<FooterStyle ForeColor="#003399" BackColor="#99CCCC"></FooterStyle>
<Columns>
<asp:BoundColumn DataField="messageid" ReadOnly="True" HeaderText="留言数"></asp:BoundColumn>
<asp:BoundColumn DataField="messname" HeaderText="留言者"></asp:BoundColumn>
<asp:BoundColumn DataField="messtitle" HeaderText="标题"></asp:BoundColumn>
<asp:BoundColumn DataField="messcontent" HeaderText="留言内容"></asp:BoundColumn>
<asp:BoundColumn DataField="messdate" HeaderText="留言时间"></asp:BoundColumn>
<asp:ButtonColumn Text="删除" CommandName="Delete"></asp:ButtonColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑">
<HeaderStyle Width="20px"></HeaderStyle>
</asp:EditCommandColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox id=chkselect onclick=AddRemoveValues(this) runat="server" value=''<%#DataBinder.Eval(Container.DataItem,"messageid")%>''>
</asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle NextPageText="下一页" PrevPageText="上一页" HorizontalAlign="Left" ForeColor="#003399"
BackColor="#99CCCC"></PagerStyle>
</asp:DataGrid>
</asp:panel></FONT>
</form>
</body>
</HTML>





using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

namespace datagrid
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Web.UI.WebControls.Panel Panel1;
protected System.Web.UI.HtmlControls.HtmlInputHidden HdnSelectedValues;
int i=0;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!this.IsPostBack)
{
this.bindtogrid();


}



}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
this.DataGrid1.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_CancelCommand);
this.DataGrid1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_EditCommand);
this.DataGrid1.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_UpdateCommand);
this.DataGrid1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
private void bindtogrid()
{
SqlConnection con=DB.createcon();
con.Open();
SqlDataAdapter sda=new  SqlDataAdapter();
sda.SelectCommand=new SqlCommand("select * from book",con);
DataSet ds=new DataSet();
sda.Fill(ds,"book");
this.DataGrid1.DataSource=ds.Tables["book"];
this.DataGrid1.DataKeyField="messageid";
this.DataGrid1.DataBind();
con.Close();
}



private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{  

   this.Button1_Click(null,null);
   this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
   this.bindtogrid();

   

}

private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","c=this.style.backgroundColor;this.style.backgroundColor=''#699ff''");
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=c");
((LinkButton)(e.Item.Cells[5].Controls[0])).Attributes.Add("onclick","return confirm(''确定删除吗?'')");
}
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if(HdnSelectedValues.Value.IndexOf(((Literal)e.Item.Cells[0].FindControl("chkSelect")).Text) >= 0 )
{
HtmlInputCheckBox ChkSelected = (HtmlInputCheckBox)(e.Item.Cells[0].FindControl("ChkSelect"));
ChkSelected.Checked = true;
}
}


}

private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
  string messageid=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
SqlConnection con=DB.createcon();
con.Open();
SqlCommand cmd=new SqlCommand("delete from book where messageid=''"+messageid+"''",con);
cmd.ExecuteNonQuery();
this.bindtogrid();


}

private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{  
this.DataGrid1.EditItemIndex=e.Item.ItemIndex;

this.bindtogrid();

}

private void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
this.DataGrid1.EditItemIndex=-1;
this.bindtogrid();
}

private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string id=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
string name=((TextBox)(e.Item.Cells[1].Controls[0])).Text;

SqlConnection con=DB.createcon();
con.Open();
            SqlCommand cmd=new SqlCommand("update book set messname=''"+name+"'' where messageid=''"+id+"''",con);
cmd.ExecuteNonQuery();
this.DataGrid1.EditItemIndex=-1;
this.bindtogrid();

}

private void Button1_Click(object sender, System.EventArgs e)
{   

foreach (DataGridItem dl in this.DataGrid1.Items)

CheckBox chk=(CheckBox)dl.FindControl("chkSelect");
if(chk.Checked)
{     i++;
Response.Write(dl.Cells[0].Text);
}
if(i>3)
{
Response.Write("<script language=javascript>alert(\"已经添加够了\")</script>");
}

}

}
}
}

在线等,急!
评论日期:2007年05月28日 00:00:00 评论人:tohen
建aspx.mdb, 去掉Name="Literal1" 后可以正常运行!

谢谢孟子!!!!  ^_^
评论日期:2007年08月28日 00:00:00 评论人:xinding
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
//重新显示所选择的项目
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if(HdnSelectedValues.Value.IndexOf(((Literal)e.Item.Cells[1].FindControl("TitleShow")).Text) >= 0 )
{
HtmlInputCheckBox ChkSelected = (HtmlInputCheckBox)(e.Item.Cells[0].FindControl("ChkSelect"));
ChkSelected.Checked = true;
}
}
}
请问这段是不是跨页选择的恢复是否选中的方法啊。。
你用的是不是VS2003的啊。。可我用的是VS2005啊。。
我都没看见有这个事件的。。我托的空间是GridView啊。。为什么你的是DataGrid啊。。
我现在摘选了些javascript代码可以实现选择后获得需要获取的值。。可现在一翻页就前面所选择的选择状态就没了。。但隐藏控件里还是有刚才所选择的值。。
请问大家能不能给我点帮助啊。。
谢谢啦!!!!
评论日期:2007年11月13日 00:00:00 评论人:lmx
         HtmlInputCheckBox ChkSelected = (HtmlInputCheckBox)(e.Item.Cells[0].FindControl("ChkSelect"));
ChkSelected.Checked = true;
请问为什么我的程序中执行上段代码的时候总是报“未将对象引用设置到对象实例”的错
发表评论:(由于众所周知的原因,评论需要审核后才能显示,请勿重复发评论。谢谢!!)
标题:
用户名:
内容:
验证码: 请输入右边图像中的文字。验证码