datagrid 动态添加列! 在线等! DataGrid 中有四列,一列是Radio,一列是与数据库绑定的普通字段,最后一列是一个下拉列表框,最后一列是按纽.初始显示的时候,第三列为下拉列表框,当选择一项时,并且第一列Radio也被选中,单击按钮,提交数据,第三列边为TextBox控件.请问,第三列该如何实现! 请高手指教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.devshow.com/web-design,asp,database-query,5761.htm 用模板列实现DataGrid模板列的简单应用http://www.soeye.cn/article/2006-4/255.html 数据源结构同http://blog.csdn.net/lovecherry/archive/2005/03/24/328455.aspx表dep:depid(标识主键),depname(学院名字)表stu:stuid(标识主键),stuname(学生名字),studepid(学院id=表dep.depid)前台:<%@ Page language="c#" Codebehind="WebForm30.aspx.cs" AutoEventWireup="false" Inherits="csdn.WebForm30" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML><HEAD><title>WebForm30</title><meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"><meta name="CODE_LANGUAGE" Content="C#"><meta name="vs_defaultClientScript" content="JavaScript"><link href="css.css" rel="stylesheet" type="text/css"><meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"></HEAD><body MS_POSITIONING="GridLayout"><form id="Form1" method="post" runat="server"></form></body></HTML>后台:using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;namespace csdn{/// <summary>/// WebForm30 的摘要说明。/// </summary>public class WebForm30 : System.Web.UI.Page{DataGrid DataGrid1=new DataGrid();private void Page_Load(object sender, System.EventArgs e){// 在此处放置用户代码以初始化页面CreateDataGrid(); }protected void CreateDataGrid(){DataGrid1.AutoGenerateColumns=false;DataGrid1.CssClass="border";DataGrid1.BorderWidth=0;DataGrid1.CellSpacing=1;DataGrid1.CellPadding=5;DataGrid1.ItemStyle.CssClass="item";DataGrid1.HeaderStyle.CssClass="header";DataGrid1.DataKeyField="stuid";//以上设定DataGrid的样式TemplateColumn tm=new TemplateColumn();tm.ItemTemplate=new ColumnTemplate1();tm.HeaderText="姓名";DataGrid1.Columns.Add(tm);//建立第一个模板列TemplateColumn tm2=new TemplateColumn();tm2.ItemTemplate=new ColumnTemplate2();tm2.HeaderText="学院";DataGrid1.Columns.Add(tm2);//建立第二个模板列ButtonColumn bc=new ButtonColumn();bc.ButtonType=ButtonColumnType.PushButton;bc.CommandName="del";bc.Text="删除";DataGrid1.Columns.Add(bc);//建立删除按钮列SetBind();//填充数据Page.Controls[1].Controls.Add(DataGrid1);//给页面的form加入这个DataGrid1}protected void SetBind(){SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);SqlDataAdapter da=new SqlDataAdapter("select * from stu,dep where stu.studepid=dep.depid",conn);DataSet ds=new DataSet();da.Fill(ds,"table1");this.DataGrid1.DataSource=ds.Tables["table1"];this.DataGrid1.DataBind();}private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e){//和上面连接给出的例子中的代码一样,给下拉框绑定数据,并且选择默认的SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);SqlDataAdapter da=new SqlDataAdapter("select * from dep",conn);DataSet ds=new DataSet();da.Fill(ds,"table1");if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){DropDownList ddl=(DropDownList)e.Item.FindControl("dep");ddl.DataSource=ds.Tables["table1"];ddl.DataTextField="depname";ddl.DataValueField="depid";ddl.DataBind();ddl.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"depid"))).Selected=true;}}private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){if(e.CommandName=="del"){SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);SqlCommand comm=new SqlCommand("delete from stu where stuid=@id",conn);SqlParameter parm1=new SqlParameter("@id",SqlDbType.Int);parm1.Value=this.DataGrid1.DataKeys[e.Item.ItemIndex];comm.Parameters.Add(parm1);conn.Open();comm.ExecuteNonQuery();conn.Close();SetBind();}}#region Web 窗体设计器生成的代码override protected void OnInit(EventArgs e){//// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。//InitializeComponent();base.OnInit(e);}/// <summary>/// 设计器支持所需的方法 - 不要使用代码编辑器修改/// 此方法的内容。/// </summary>private void InitializeComponent(){ this.Load += new System.EventHandler(this.Page_Load);this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);//这里的两个事件千万别忘记,因为DataGrid是后台创建的,这些事件需要自己来写上,vs.net也不会为你创建}#endregion}public class ColumnTemplate1 : ITemplate{//第一个模板列public void InstantiateIn(Control container) {LiteralControl l = new LiteralControl();l.DataBinding += new EventHandler(this.OnDataBinding);//数据绑定container.Controls.Add(l);//为模板列加入LiteralControl}public void OnDataBinding(object sender, EventArgs e){LiteralControl l = (LiteralControl) sender;//LiteralControl发送绑定请求DataGridItem container = (DataGridItem) l.NamingContainer;l.Text = ((DataRowView)container.DataItem)["stuname"].ToString();//绑定stuname字段}}public class ColumnTemplate2 : ITemplate{//第二个模板列public void InstantiateIn(Control container) {DropDownList dpl = new DropDownList();dpl.ID="dep";container.Controls.Add(dpl);//加入一个id="dep"的下拉框,数据在DataGrid的ItemDataBound中绑定}} } IIS创建应用程序池,代码实现网站“主目录”创建应用程序名后没有效果,有完整代码,谢谢 substring NHibernate中外联接的一个错误..明白的指点一下!!! js 播放背景音乐 DataGrid导出Excel的问题 一个关于ASP.NET的问题 请教DataGrid绑定列格式化的一个问题 asp.net与flex交互问题 如何提交修改后的myset.Tables["rsdaAcc"]? 刚刚接触asp.NET,一个简单的问题。。。 有两个关于。NET如何获取IE事件的问题??? [散分]揭秘ASP.NET 2.0的Eval方法
DataGrid模板列的简单应用
http://www.soeye.cn/article/2006-4/255.html
表dep:depid(标识主键),depname(学院名字)
表stu:stuid(标识主键),stuname(学生名字),studepid(学院id=表dep.depid)前台:
<%@ Page language="c#" Codebehind="WebForm30.aspx.cs" AutoEventWireup="false" Inherits="csdn.WebForm30" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm30</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<link href="css.css" rel="stylesheet" type="text/css">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
</form>
</body>
</HTML>
后台:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace csdn
{
/// <summary>
/// WebForm30 的摘要说明。
/// </summary>
public class WebForm30 : System.Web.UI.Page
{
DataGrid DataGrid1=new DataGrid();
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
CreateDataGrid();
}protected void CreateDataGrid()
{
DataGrid1.AutoGenerateColumns=false;
DataGrid1.CssClass="border";
DataGrid1.BorderWidth=0;
DataGrid1.CellSpacing=1;
DataGrid1.CellPadding=5;
DataGrid1.ItemStyle.CssClass="item";
DataGrid1.HeaderStyle.CssClass="header";
DataGrid1.DataKeyField="stuid";
//以上设定DataGrid的样式
TemplateColumn tm=new TemplateColumn();
tm.ItemTemplate=new ColumnTemplate1();
tm.HeaderText="姓名";
DataGrid1.Columns.Add(tm);
//建立第一个模板列
TemplateColumn tm2=new TemplateColumn();
tm2.ItemTemplate=new ColumnTemplate2();
tm2.HeaderText="学院";
DataGrid1.Columns.Add(tm2);
//建立第二个模板列
ButtonColumn bc=new ButtonColumn();
bc.ButtonType=ButtonColumnType.PushButton;
bc.CommandName="del";
bc.Text="删除";
DataGrid1.Columns.Add(bc);
//建立删除按钮列
SetBind();
//填充数据
Page.Controls[1].Controls.Add(DataGrid1);
//给页面的form加入这个DataGrid1
}protected void SetBind()
{
SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
SqlDataAdapter da=new SqlDataAdapter("select * from stu,dep where stu.studepid=dep.depid",conn);
DataSet ds=new DataSet();
da.Fill(ds,"table1");
this.DataGrid1.DataSource=ds.Tables["table1"];
this.DataGrid1.DataBind();}private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
//和上面连接给出的例子中的代码一样,给下拉框绑定数据,并且选择默认的
SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
SqlDataAdapter da=new SqlDataAdapter("select * from dep",conn);
DataSet ds=new DataSet();
da.Fill(ds,"table1");
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
DropDownList ddl=(DropDownList)e.Item.FindControl("dep");
ddl.DataSource=ds.Tables["table1"];
ddl.DataTextField="depname";
ddl.DataValueField="depid";
ddl.DataBind();
ddl.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"depid"))).Selected=true;
}
}private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName=="del")
{
SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
SqlCommand comm=new SqlCommand("delete from stu where stuid=@id",conn);
SqlParameter parm1=new SqlParameter("@id",SqlDbType.Int);
parm1.Value=this.DataGrid1.DataKeys[e.Item.ItemIndex];
comm.Parameters.Add(parm1);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
SetBind();
}
}#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);//这里的两个事件千万别忘记,因为DataGrid是后台创建的,这些事件需要自己来写上,vs.net也不会为你创建
}
#endregion
}public class ColumnTemplate1 : ITemplate
{
//第一个模板列
public void InstantiateIn(Control container)
{
LiteralControl l = new LiteralControl();
l.DataBinding += new EventHandler(this.OnDataBinding);
//数据绑定
container.Controls.Add(l);
//为模板列加入LiteralControl
}public void OnDataBinding(object sender, EventArgs e)
{
LiteralControl l = (LiteralControl) sender;//LiteralControl发送绑定请求
DataGridItem container = (DataGridItem) l.NamingContainer;
l.Text = ((DataRowView)container.DataItem)["stuname"].ToString();//绑定stuname字段
}
}public class ColumnTemplate2 : ITemplate
{
//第二个模板列
public void InstantiateIn(Control container)
{
DropDownList dpl = new DropDownList();
dpl.ID="dep";
container.Controls.Add(dpl);
//加入一个id="dep"的下拉框,数据在DataGrid的ItemDataBound中绑定
}
}
}