3层分类的关系,用DataGrid来显示,这是非常简单的事情。现在在每一个datagrid上增加一个checkbox,用来控制自身分类下的checkbox
代码贴出来,怕以后忘记
///////////////////////////////////////////////////////////////////////////////////////
//添加相关产品分类的页面
///////////////////////////////////////////////////////////////////////////////////////
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 LubeBLL;
using LubeBLL.Category;
using LubeDAL;
namespace Manage
{
///
/// newsProductCategory 的摘要说明。
///
public class newsProductCategory : System.Web.UI.Page
{
#region Web 窗体设计器生成的代码
protected System.Web.UI.WebControls.Label LBNewsTitle;
protected System.Web.UI.WebControls.LinkButton BTSave;
protected System.Web.UI.WebControls.DataGrid dgFirstLevel;
protected System.Web.UI.WebControls.DataGrid dgThirdLevel;
protected System.Web.UI.WebControls.CustomValidator validRecordStatus;
protected System.Web.UI.WebControls.LinkButton BTBackPreview;
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.dgFirstLevel.PreRender += new System.EventHandler(this.dgFirstLevel_PreRender);
this.BTSave.Click += new System.EventHandler(this.BTSave_Click);
this.BTBackPreview.Click += new System.EventHandler(this.BTBackPreview_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
#region "页面定义的常量"
//新闻预览的页面
private const string m_NEWS_PREVIEW_PAGE=@"newsPreView.aspx";
//出错转跳得默认页面
private const string m_DEFAULTURL="newsManage.aspx";
//没有登陆时转跳的页面
private const string m_NO_POWER_PAGE=@"main.aspxre=t";
//更新关系时失败,留在原页面
private const string m_UPDATE_FAILURE_MESSAGE=@"数据更新失败,请稍候再试";
#endregion
private DataSet dsBind;
private void BTBackPreview_Click(object sender, System.EventArgs e)
{
//回到新闻预览页面
string strBackURL=GetPreViewPageURL();
Response.Redirect(strBackURL);
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!IsPostBack)
{
dsBind=new DataSet();
//CheckPower
//CheckPower();
//SetViewState
SetViewState();
//DoInitDisplay
DoInitDisplay();
//BindData
BindData();
}
//WriteJavaScript();
WriteJavaScript();
}
#region "前台邦定3层关系用到的代码"
//邦定第二层
protected ArrayList GetSecondCategory(string strFirstSeq)
{
DataTable dtSecond=new DataTable();
ArrayList arrReturn=new ArrayList();
dtSecond=dsBind.Tables["SecondCategory"];
Category item;
foreach (DataRow dr in dtSecond.Rows)
{
item =new Category();
if (dr["first_seq"].ToString()==strFirstSeq)
{
item.SecondSeq=dr["second_seq"].ToString();
item.SecondDesc =dr["SecondDesc"].ToString();
item.FirstSeq =dr["first_seq"].ToString();
arrReturn.Add(item);
}
}
return arrReturn;
}
//邦定第三层
protected ArrayList GetThirdCategory(string strSecondSeq)
{
DataTable dtSecond=new DataTable();
ArrayList arrReturn=new ArrayList();
dtSecond=dsBind.Tables["ThirdCategory"];
Category item;
foreach (DataRow dr in dtSecond.Rows)
{
item =new Category();
if (dr["second_seq"].ToString()==strSecondSeq)
{
item.ThirdSeq =dr["third_seq"].ToString();
item.ThirdDesc=dr["ThirdDesc"].ToString();
item.SecondSeq =dr["second_seq"].ToString();
arrReturn.Add(item);
}
}
return arrReturn;
}
#endregion
private void WriteJavaScript()
{
this.BTSave.Attributes.Add("onclick","return SaveCheck();");
}
//设置ViewState
private void SetViewState()
{
//参数news_seq为新闻的seq,rtype 标志显示新闻的关系的种类
string strNews_seq=Request.QueryString["news_seq"];
string strTopic_seq=Request.QueryString["topic_seq"];
string strRelateType=Request.QueryString["rtype"];
if (strNews_seq!=null && strNews_seq!=""
&& strTopic_seq!=null && strTopic_seq!=""
&& strRelateType!=null && strRelateType!="" )
{
ViewState["news_seq"]=strNews_seq;//新闻的Seq
ViewState["topic_seq"]=strTopic_seq;
ViewState["rtype"]=strRelateType;//显示新闻的关系的类别
}
else
{
//没有新闻seq或者没有指定显示关系的类别,转跳到默认的新闻首页
Response.Redirect(m_DEFAULTURL);
}
}
//DoInitDisplay
private void DoInitDisplay()
{
}
//BindData
private void BindData()
{
//根据news_seq 和 rtype来显示关系
try
{
ClassNews t =new ClassNews();
int intNewsSeq=Convert.ToInt32(ViewState["news_seq"].ToString());//news_seq
dsBind=t.C1_GetProductTypeList(intNewsSeq);
//得到基本信息
//显示新闻的标题
this.LBNewsTitle.Text=dsBind.Tables["NewsInfo"].Rows[0][0].ToString();
this.dgFirstLevel.DataSource=dsBind;
this.dgFirstLevel.DataMember=dsBind.Tables["FirstCategory"].TableName;
this.dgFirstLevel.DataBind();
if (dsBind.Tables["FirstCategory"].Rows.Count==0)
{
this.BTSave.Visible=false;
}
else
{
this.BTSave.Visible=true;
}
}
catch(Exception e)
{
string a=e.Message;
}
finally
{
dsBind.Dispose();
}
}
//得到返回新闻预览画面的url地址
private string GetPreViewPageURL()
{
string strURL=m_NEWS_PREVIEW_PAGE
+"news_seq=" + ViewState["news_seq"].ToString()
+ "&topic_seq="+ ViewState["topic_seq"].ToString()
+ "&rtype=" +ViewState["rtype"].ToString();
return strURL;
}
//得到所有选择的信息,返回以逗号分隔的字符串
private ArrayList GetSelectContent()
{
System.Web.UI.WebControls.CheckBox chkFirst=new System.Web.UI.WebControls.CheckBox();
System.Web.UI.WebControls.CheckBox chkSecond=new System.Web.UI.WebControls.CheckBox();
System.Web.UI.WebControls.CheckBox chkThird=new System.Web.UI.WebControls.CheckBox();
ArrayList arrReturn=new ArrayList();
string sIDFirstSelect=null;
string sIDFirstUnSelect=null;
string sIDSecondSelect=null;
string sIDSecondUnSelect=null;
string sIDThridSelect=null;
string sIDThirdUnSelect=null;
foreach (DataGridItem dgFirstItem in this.dgFirstLevel.Items )//1级分类
{
chkFirst=(CheckBox)dgFirstItem.FindControl("chkFirstSelect");
if (chkFirst.Checked)
{
sIDFirstSelect=sIDFirstSelect + dgFirstItem.Cells[0].Text + ",";//1级分类选中的seq
}
else
{
sIDFirstUnSelect=sIDFirstUnSelect + dgFirstItem.Cells[0].Text + ",";//1级分类没有选中的seq
}
foreach(DataGridItem dgSecondItem in ((DataGrid)(dgFirstItem.Cells[2].Controls[3])).Items )//2级分类的相关列表
{
chkSecond=(CheckBox)dgSecondItem.FindControl("chkSecondSelect");
if (chkSecond.Checked)
{
sIDSecondSelect=sIDSecondSelect + dgSecondItem.Cells[0].Text + ",";//2级分类选中的seq
}
else
{
sIDSecondUnSelect=sIDSecondUnSelect + dgSecondItem.Cells[0].Text + ",";//2级分类没有选中的seq
}
foreach(DataGridItem dgThirdItem in ((DataGrid)(dgSecondItem.Cells[2].Controls[3])).Items )//3级分类的相关列表
{
chkThird=(CheckBox)dgThirdItem.FindControl("chkThirdSelect");
if (chkThird.Checked)
{
sIDThridSelect=sIDThridSelect + dgThirdItem.Cells[0].Text + ",";//3级分类选中的seq
}
else
{
sIDThirdUnSelect=sIDThirdUnSelect + dgThirdItem.Cells[0].Text + ",";//3级分类没有选中的seq
}
}
}
}
arrReturn.Add(sIDFirstSelect);
arrReturn.Add(sIDFirstUnSelect);
arrReturn.Add(sIDSecondSelect);
arrReturn.Add(sIDSecondUnSelect);
arrReturn.Add(sIDThridSelect);
arrReturn.Add(sIDThirdUnSelect);
for (int i=0 ;i<ARRRETURN.COUNT;I++)
{
if (arrReturn!=null)
{
arrReturn=(arrReturn.ToString()).Substring(0,arrReturn.ToString().Length-1);
}
}
return arrReturn;
}
private void BTSave_Click(object sender, System.EventArgs e)
{
//保存打勾得关系
int intReturn=DoSaveRelation();
if (intReturn!=0)
{
//保存时发生错误,留在当前页面
this.validRecordStatus.ErrorMessage=m_UPDATE_FAILURE_MESSAGE;
this.validRecordStatus.IsValid=false;
}
else
{
//成功操作后
//返回新闻预览画面
string strBackURL=GetPreViewPageURL();
Response.Redirect(strBackURL);
}
}
//保存设定的关系
private int DoSaveRelation()
{
int intReturn=0;
//得到DataGrid中去掉CheckBox中打勾的seq
ArrayList arrSelectSeq=GetSelectContent();
//首先判断strSelectSeq是否为空,为空的话则说明不需要执行下面的操作
//调用接口函数,将选中的关系保存在数据库中
//ClassNews t=new ClassNews();
//string strErr=t.C1_NewsRelatedDelete(Convert.ToInt32(ViewState["news_seq"].ToString()),ViewState["rtype"].ToString(),strSelectSeq);
string strErr="OK";
if (strErr!=ClassCommon.PrintMessage.msg_Successful_DBUpdate)
{
intReturn--;
}
else
{
intReturn=0;
}
return intReturn;
}
private void dgFirstLevel_PreRender(object sender, System.EventArgs e)
{
System.Web.UI.WebControls.CheckBox chkFirst=new System.Web.UI.WebControls.CheckBox();
System.Web.UI.WebControls.CheckBox chkSecond=new System.Web.UI.WebControls.CheckBox();
System.Web.UI.WebControls.CheckBox chkThird=new System.Web.UI.WebControls.CheckBox();
CheckBox allbox=new CheckBox();
CheckBox allboxs=new CheckBox();
CheckBox allboxt=new CheckBox();
foreach (DataGridItem item in this.dgFirstLevel.Controls[0].Controls)//找到第一层全选的checkbox
{
if (item.ItemType == ListItemType.Header)
{
allbox=(CheckBox)item.FindControl("allbox");
break;
}
}
foreach (DataGridItem dgFirstItem in this.dgFirstLevel.Items )//1级分类
{
chkFirst=(CheckBox)dgFirstItem.FindControl("chkFirstSelect");
chkFirst.Attributes["onclick"]=String.Format("javascript:CheckParent(´{0}´);",allbox.ClientID);
foreach (DataGridItem item in ((DataGrid)(dgFirstItem.Cells[2].Controls[3])).Controls[0].Controls)//找到第二层全选的checkbox
{
if (item.ItemType == ListItemType.Header)
{
allboxs=(CheckBox)item.FindControl("allboxs");
break;
}
}
foreach(DataGridItem dgSecondItem in ((DataGrid)(dgFirstItem.Cells[2].Controls[3])).Items )//2级分类的相关列表
{
chkSecond=(CheckBox)dgSecondItem.FindControl("chkSecondSelect");
chkSecond.Attributes["onclick"]=String.Format("javascript:CheckParent(´{0}´);",allboxs.ClientID);
foreach (DataGridItem item in ((DataGrid)(dgSecondItem.Cells[2].Controls[3])).Controls[0].Controls)//找到第三层全选的checkbox
{
if (item.ItemType == ListItemType.Header)
{
allboxt=(CheckBox)item.FindControl("allboxt");
break;
}
}
foreach(DataGridItem dgThirdItem in ((DataGrid)(dgSecondItem.Cells[2].Controls[3])).Items )//3级分类的相关列表
{
chkThird=(CheckBox)dgThirdItem.FindControl("chkThirdSelect");
chkThird.Attributes["onclick"]=String.Format("javascript:CheckParent(´{0}´);",allboxt.ClientID);
}
}
}
}
}
}