超级难,!!!
生成3维DataTable要求根据查询条件把查询结果生成为这样的一个DataTable------------------------------------
序号| 课程名称 | 资料 | 光盘 | 讲义
------------------------------------
1 | 数学 |#选中 | |#选中
------------------------------------
2 | 语文 | | #选中|#选中
------------------------------------
3 | 历史 | | |#代表一个复选框
后三列名是动态的(从数据库表中获得),即:除了资料、光盘、讲义外还可能有别的类别。如:图片课程名称列是从数据库中查找的,即:数学、语文、历史,取自数据库。(还有别的课。。)然后,
根据课程名称,从数据库表中查询是否有相应的资料、 光盘、 讲义(等等类别),
有,则在单元格中显示一个复选框。(并要为此复选框添加单击事件)
无,则显示空白。-----------------------------简直晕了,,,,
哪位大哥给指点一下,俺一点思路都没有了
本来俺认为弄个循环嵌套就行了,可编来编去发现没法循环嵌套啊,越编越乱,根本实现不了
大虾们给俺点思路,有例程最好了100分一定奉上。!!!
生成3维DataTable要求根据查询条件把查询结果生成为这样的一个DataTable------------------------------------
序号| 课程名称 | 资料 | 光盘 | 讲义
------------------------------------
1 | 数学 |#选中 | |#选中
------------------------------------
2 | 语文 | | #选中|#选中
------------------------------------
3 | 历史 | | |#代表一个复选框
后三列名是动态的(从数据库表中获得),即:除了资料、光盘、讲义外还可能有别的类别。如:图片课程名称列是从数据库中查找的,即:数学、语文、历史,取自数据库。(还有别的课。。)然后,
根据课程名称,从数据库表中查询是否有相应的资料、 光盘、 讲义(等等类别),
有,则在单元格中显示一个复选框。(并要为此复选框添加单击事件)
无,则显示空白。-----------------------------简直晕了,,,,
哪位大哥给指点一下,俺一点思路都没有了
本来俺认为弄个循环嵌套就行了,可编来编去发现没法循环嵌套啊,越编越乱,根本实现不了
大虾们给俺点思路,有例程最好了100分一定奉上。!!!
1、创建一个自定义列的DataTable;
2、向创建好的DataTable中一行一行地写入数据;
3、绑定到DataGrid中去。整个过程有点儿麻烦,需要耐心地去调试,我是写了差不多3天才完成的。
并且这三列做成模版列,不要用动态模版列,根据的你查询情况,看看有没有资料、光盘、讲义这几项,来设置模版列的显示与否。
比如说资料的字段0表示有,1表示无。那么select count(*) from table where 资料=0.如果count为0,datagrid对应的列visible为ture,否则为flase.复选框,也就是checkbox,放入模版列中,邦定datagrid的时候不要管它,你在itemdatabond事件中进行checkbox的判断,数据中为0的时候,选中,否则不选中。那个checkbox的事件<asp:TemplateColumn HeaderText="ハヌキ」ヨケ">
<ItemTemplate>
<asp:CheckBox id="cbxIsstop" runat="server" AutoPostBack="True" OnCheckedChanged="check_chaged"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
public void check_chaged(object sender,System.EventArgs e)
{
RouteLineRules linerules = new RouteLineRules();
routelineentity = (RouteLineEntity)ViewState["route"]; DataGridItem dgi = (DataGridItem)(((Control)sender).NamingContainer); cbxcheckbox=(CheckBox)dgi.Cells[5].FindControl("cbxIsstop");// string strIsstop = this.grdLineGov.Items[dgi.ItemIndex].Cells[3].Text;
routelineentity.RouteIdChg = this.grdLineGov.Items[dgi.ItemIndex].Cells[4].Text;
routelineentity.StoreCode = this.grdLineGov.Items[dgi.ItemIndex].Cells[5].Text; if(cbxcheckbox.Checked.Equals(true))
{
routelineentity.IsStop = 1;
linerules.SetIsstop(routelineentity);
}
else if(cbxcheckbox.Checked.Equals(false))
{
routelineentity.IsStop = 0;
linerules.SetIsstop(routelineentity);
} linerules.BindRouteGird(ref grdLineGov,routelineentity);
}参考这个来做
与此相关的有5个表呢,不方便帖出来。能否先给一下例程的代码?
简单说一下表结构吧:
1、课程表Course
CourseID
CourseName
CsID
2、类别表(资料、光盘、图书等)Class
ClassID
ClassName3、教材资料资料表(即:资料、光盘、图书等东西)Book
BookID
BookName
CsID
ClassID4、课程资源信息 CsClass
CsID
ClassID
status5、课程资源 (用不着) Cs
CsID
CsName(省略了这几个表中其他与本功能无关的字段)另外,
这些表是主管设计创建的,虽然知道有些地方设计的不太合理,
但俺无权修改表结构啊,
整个系统比较大,因为还要和其他别的表(和本功能无关)联系
很简单,不过代码繁琐而以
首先,你取数据不能用sql,因为sql没办法做到动态列,用c#代码取出数据,放进dataset,不用教吧?
根据列用代码画datagrid也不用教吧?
就这么简单,不过画的代码很烦而以
把checkbox控件的visible 属性绑定到这列
加载时false的不会显示.
控件事件正常添加.
把checkbox控件的visible 属性绑定到这列
加载时false的不会显示.
控件事件正常添加.
关键字group by, isnull或case
ID 列名
1 资料
2 光盘
3 讲义
然后,动态生成一个二维表(DataTable),为它增加上面那个表的那些列,用DataTable.Columns.Add即可。
在然后就是重新组合数据:ID 课程 列
1 语文 讲义
2 语文 资料不是这种格式想办法转成这种格式。
最后是填充表先按课程分组,得到课程名,在结果表中一次性插入所有的行。
然后再遍历上面的那个数据表,为结果表的各个列赋值。
using System.Web.UI.WebControls;
using System.Data;
namespace jsgb
{
/// <summary>
/// 人员信息维护
/// </summary>
public class EmpModi : System.Web.UI.WebControls.WebControl
{ private string _p_number="";
private System.Web.UI.WebControls.Table _table;
private string[] _ctl=new string[100];
private string[] _ctltype=new string[100];
private int g_ctl=0;
private int _moditype=0; //更新模式 0更新 1添加 //人员编号
public string P_Number
{
get
{
return _p_number;
}
set
{
_p_number=value;
if(value=="-1")
{
mysdd.db _tmp=new db();
DataTable _tb=_tmp.gettable("select S_AA01_P_NUMBER.nextval from dual");
_tmp.Dispose();
_p_number=_tb.Rows[0][0].ToString();
_moditype=1; //添加模式
// _tmp.showmsg(_moditype.ToString());
}
}
}
/// <summary>
/// 修改类型
/// </summary>
public int ModiType
{
get
{
return _moditype;
}
set
{
_moditype=value;
}
}
//生成控件的容器Table
public System.Web.UI.WebControls.Table UITable
{
get
{
return _table;
}
set
{
_table=value;
}
} /// <summary>
/// 创建初始控件
/// </summary>
public void CreateUI()
{ TableRow _trow=new TableRow();
TableCell _tc=new TableCell();
System.Web.UI.WebControls.DropDownList _ddl=new DropDownList();
TextBox _txtbox=new TextBox(); JGField _jgfield=new JGField();
Util _util=new Util();
DataTable _tb=_jgfield.GetFieldInfo();
DataTable _tbdic=_jgfield.GetFieldInfo();
DataRow l_row; g_ctl=_tb.Rows.Count; _trow=new TableRow();
for(int i=0;i<_tb.Rows.Count;i++)
{
l_row=_tb.Rows[i];
_tc=new TableCell();
_tc.Text=l_row["cfname"].ToString();
_trow.Cells.Add(_tc);
_tc=new TableCell();
_ctl[i]=l_row["efname"].ToString(); //控件ID
_ctltype[i]=l_row["d_type"].ToString(); //控件类型
if((l_row["d_type"].ToString().Trim()=="C")&&(l_row["repdescrip"].ToString().Trim()!=""))
{
_ddl=new DropDownList();
_ddl.ID=l_row["efname"].ToString();
_ddl.DataTextField="c_brif";
_ddl.DataValueField="e_expr";
_tbdic=_util.GetDIC(l_row["repdescrip"].ToString());
_ddl.DataSource=_tbdic.DefaultView;
_ddl.DataBind();
_tc.Controls.Add(_ddl);
_trow.Cells.Add(_tc); }
else if((l_row["d_type"].ToString().Trim()=="C")&&(l_row["repdescrip"].ToString().Trim()==""))
{
_txtbox=new TextBox();
_txtbox.ID=l_row["efname"].ToString();
_txtbox.CssClass="inputtext";
//_txtbox.ToolTip=l_row["c_expr"].ToString();
_tc.Controls.Add(_txtbox);
_trow.Cells.Add(_tc); }
else if(l_row["d_type"].ToString().Trim()=="D")
{
_txtbox=new TextBox();
_txtbox.ID=l_row["efname"].ToString();
_txtbox.CssClass="inputtext";
//_txtbox.ToolTip=l_row["c_expr"].ToString();
_txtbox.Attributes["onfocus"]="javascript:calendar();";
_tc.Controls.Add(_txtbox);
_trow.Cells.Add(_tc); }
else
{
_txtbox=new TextBox();
_txtbox.ID=l_row["efname"].ToString();
_txtbox.CssClass="inputtext";
//_txtbox.ToolTip=l_row["c_expr"].ToString();
_tc.Controls.Add(_txtbox);
_trow.Cells.Add(_tc);
}
if(i==0)
{
_tc=new TableCell();
System.Web.UI.WebControls.Image _image=new System.Web.UI.WebControls.Image();
_image.Width=Unit.Parse("110px");
_image.Height=Unit.Parse("115px");
_image.ToolTip="点击设置此人照片";
_image.ID="emppic";
string url="../comm/updatepic.aspx?number="+_p_number;
_image.Attributes["onclick"]="javascipt:window.open(\""+url+"\",'','Toolbar =no,menubar=no,scrollbars=no,status=no,location=no,resizable =no,directories=no,width=450,height=100,top=334,left=287');";
_image.Attributes["style"]="cursor:hand;";
_image.ImageUrl="../comm/viewpic.aspx?p_number="+_p_number;
_tc.Controls.Add(_image);
_tc.RowSpan=3;
_trow.Cells.Add(_tc);
}
if((i==1)||(i==2))
{
_table.Rows.Add(_trow);
_trow=new TableRow();
} if(i%2==0)
{
_table.Rows.Add(_trow);
_trow=new TableRow();
}
}
//处理权限及单位问题
User _user=new User();
if(_user.LoginStatus)
{
object _obj=_table.FindControl("AA01A03");
if((_obj!=null)&&(_user.UserGroup!="01")) //不是系统组的用户处理
{
mysdd.basepage _tmp=new mysdd.basepage();
_tmp.ddl_val((System.Web.UI.WebControls.DropDownList)_obj,_user.DepNum);
((System.Web.UI.WebControls.DropDownList)_obj).Enabled=false;
}
}
}
/// 显示人员信息
/// </summary>
public void Display()
{
if(_moditype==1) //添加模式不需要显示原有数据
{
return ;
}
Emp _emp=new Emp();
mysdd.basepage _tmp=new basepage();
DataTable _tb=_emp.GetEmpValue(_p_number); //取得人员信息;
//取全部列名,如找到后在作处理 可能有效率问题
for(int i=0;i<_tb.Columns.Count;i++)
{
object _obj=_table.FindControl(_tb.Columns[i].Caption); if(_obj!=null)
{
if(_obj.GetType().ToString()=="System.Web.UI.WebControls.TextBox")
{
string[] v_ls=_tb.Rows[0][i].ToString().Split(' ');
((System.Web.UI.WebControls.TextBox)_obj).Text=v_ls[0]; }
if(_obj.GetType().ToString()=="System.Web.UI.WebControls.DropDownList")
{
//需要加如果未有对应项目的处理
if(!_tmp.ddl_val(((System.Web.UI.WebControls.DropDownList)_obj),_tb.Rows[0][i].ToString()))
{
((System.Web.UI.WebControls.DropDownList)_obj).Items.Insert(0,_tb.Rows[0][i].ToString());
}
}
}
} _tmp.Dispose();
}
/// <summary>
/// 普遍数据
/// </summary>
/// <returns>SQL语句</returns>
public string Update()
{
mysdd.db _tmp=new db();
_tmp.showmsg(_moditype.ToString());
if(_moditype==1)
{
return AddMode();
}
else
{
return UpdateMode();
}
} /// <summary>
/// 添加数据模式
/// </summary>
/// <returns>SQL语句</returns>
public string AddMode()
{
string v_ls_field="";
string v_ls_value="";
string ls_field="p_number,";
string ls_value="'"+_p_number+"',"; for(int i=0;i<g_ctl;i++)
{ object _obj=_table.FindControl(_ctl[i]);
if(_obj!=null)
{ if(_obj.GetType().ToString()=="System.Web.UI.WebControls.DropDownList")
{
//需要加如果未有对应项目的处理
//base.ddl_val(((System.Web.UI.WebControls.DropDownList)_obj),_tb.Rows[0][i].ToString());
v_ls_value=((System.Web.UI.WebControls.DropDownList)_obj).SelectedValue.ToString();
v_ls_field=((System.Web.UI.WebControls.DropDownList)_obj).ID.ToString();
}
else
{
v_ls_value=((System.Web.UI.WebControls.TextBox)_obj).Text;
v_ls_field=((System.Web.UI.WebControls.TextBox)_obj).ID.ToString();
}
} //处理字段
ls_field+=v_ls_field+",";
if(_ctltype[i]=="C")
{
v_ls_value="'"+v_ls_value+"'";
}
else if(_ctltype[i]=="D")
{
v_ls_value="to_date('"+v_ls_value+"','yyyy-mm-dd')";
}
ls_value+=v_ls_value+","; }
mysdd.db _tmp=new db();
_tmp.sql="insert into aa01 ("+ls_field.Substring(0,ls_field.Length-1)+") values ("+ls_value.Substring(0,ls_value.Length-1)+")";
try
{
_tmp.runsql();
}
catch
{
_tmp.showmsg("人员基本信息添加失败,请检查数据输入是否正确!");
return _tmp.sql;
}
_tmp.showmsg("人员基本信息添加成功!");
_tmp.Dispose();
return _tmp.sql;
} /// <summary>
/// 更新模式数据
/// </summary>
/// <returns>SQL语句</returns>
public string UpdateMode()
{
string v_sql="";
string v_ls_field="";
string v_ls_value=""; for(int i=0;i<g_ctl;i++)
{ object _obj=_table.FindControl(_ctl[i]);
if(_obj!=null)
{ if(_obj.GetType().ToString()=="System.Web.UI.WebControls.DropDownList")
{
//需要加如果未有对应项目的处理
// base.ddl_val(((System.Web.UI.WebControls.DropDownList)_obj),_tb.Rows[0][i].ToString());
v_ls_value=((System.Web.UI.WebControls.DropDownList)_obj).SelectedValue.ToString();
v_ls_field=((System.Web.UI.WebControls.DropDownList)_obj).ID.ToString();
}
else
{
v_ls_value=((System.Web.UI.WebControls.TextBox)_obj).Text;
v_ls_field=((System.Web.UI.WebControls.TextBox)_obj).ID.ToString();
}
}
if(_ctltype[i]=="C")
{
v_sql=v_sql+v_ls_field+"='"+v_ls_value+"',";
}
else if(_ctltype[i]=="D")
{
v_sql=v_sql+v_ls_field+"=to_date('"+v_ls_value+"','yyyy-mm-dd'),";
}
else
{
v_sql=v_sql+v_ls_field+"="+v_ls_value+",";
}
}
mysdd.db _tmp=new db();
_tmp.sql="update aa01 set "+v_sql.Substring(0,v_sql.Length-1)+" where p_number='"+_p_number+"'";
try
{
_tmp.runsql();
}
catch
{
_tmp.showmsg("人员基本信息更新失败,请检查数据输入是否正确!");
return _tmp.sql;
}
_tmp.showmsg("人员基本信息更新成功!");
_tmp.Dispose();
return _tmp.sql;
}
// public void SetModiType(int p_moditype)
// {
// //如果是-1即为添加模式 取新的p_number号
// if(p_moditype==-1)
// {
// mysdd.db _tmp=new db();
// DataTable _tb=_tmp.gettable("select S_AA01_P_NUMBER.nextval from dual");
// _tmp.Dispose();
// _p_number=_tb.Rows[0][0].ToString();
// }
// }
/// <summary>
/// 刷新照片
/// </summary>
public void RefreshPic()
{
object _obj=_table.FindControl("emppic");
if(_obj!=null)
{
((System.Web.UI.WebControls.Image)_obj).ImageUrl="../comm/updatepic.aspx?number="+_p_number;
}
}
}
}