当前位置:编程学习 > C#/ASP.NET >>

如何在后台创建Datagrid?谢谢各位大哥

如何在后台创建datagrid,有模板列.
并返回给客户端?谢谢各位大哥 --------------------编程问答-------------------- 为何要在后台创建呢?
是你的列不确定还是什么原因啊? --------------------编程问答--------------------  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中绑定
  }
 } 

--------------------编程问答-------------------- public   DataGrid   mygrid   =   new   DataGrid();   
  mygrid.CellPadding=2;   
  mygrid.Attributes.Add("align","left");   
  mygrid.CellSpacing=0;   
  mygrid.Width=784;   
  mygrid.BorderWidth=1;   
  //mygrid.BorderColor=ColorTranslator.FromHtml("Black");   
  mygrid.AutoGenerateColumns=false;   
  //mygrid.ForeColor=ColorTranslator.FromHtml("Black");   
  mygrid.Font.Size=9;   
  mygrid.Font.Name="宋体";   
  mygrid.Font   .Bold   =   true;   
  mygrid.AllowPaging   =   true;   
  mygrid.PagerStyle   .Mode   =   System.Web.UI.WebControls.PagerMode.NumericPages;   
  //CssStyleCollection   cs   =   new   CssStyleCollection   ();   
  //mygrid.AllowSorting=true;   
  ///sort命令的事件处理器   
    
  //mygrid.SortCommand   +=   new   DataGridSortCommandEventHandler(Sort_Grid);   
    
  ///设置headerstyle   
  //mygrid.HeaderStyle.BackColor=ColorTranslator.FromHtml("Gold");   
  //mygrid.HeaderStyle.ForeColor=ColorTranslator.FromHtml("Black");   
  mygrid   .HeaderStyle.Font.Name="宋体";   
  mygrid.HeaderStyle.Font.Size=9;   
  mygrid.HeaderStyle.Font.Bold=true;   
  mygrid.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;   
  ///设置alternating   style   
  //mygrid.AlternatingItemStyle.BackColor=ColorTranslator.FromHtml("Silver");   
  //mygrid.AlternatingItemStyle.ForeColor=ColorTranslator.FromHtml("Black");   
  ///设置itemstyle   
  //mygrid.ItemStyle.HorizontalAlign=HorizontalAlign.Left;   
  mygrid.ItemStyle.HorizontalAlign=HorizontalAlign.Center   ;   
  ///创建绑定列和属性   
  BoundColumn   FBDM   =   new   BoundColumn   ();   
  BoundColumn   NJ   =   new   BoundColumn();   
  BoundColumn   BH   =   new   BoundColumn();   
  BoundColumn   XH   =   new   BoundColumn();   
  BoundColumn   XM   =   new   BoundColumn();   
  FBDM.HeaderText="分部代码";   
  FBDM.DataField="FBDM";   
  //FBDM.SortExpression="FBDM";   
  NJ.HeaderText="年级";   
  NJ.DataField="NJ";   
  //NJ.SortExpression="NJ";   
  BH.HeaderText="班级";   
  BH.DataField="BH";   
  //BH.SortExpression="BH";   
  XH.HeaderText="学号";   
  XH.DataField="XH";   
  //XH.SortExpression="XH";   
  XM.HeaderText="姓名";   
  XM.DataField="XM";   
  //XM.SortExpression="XM";   
  mygrid.Columns.AddAt(0,   FBDM);   
  mygrid.Columns.AddAt(1,   NJ);   
  mygrid.Columns.AddAt(2,   BH);   
  mygrid.Columns.AddAt(3,   XH);   
  mygrid.Columns.AddAt(4,   XM);   
--------------------编程问答-------------------- 强 --------------------编程问答-------------------- DataGrid dg = new DataGrid();
dg.AutoGenerateColumns=false;//不启用自动生成列 
dg.CssClass="border";//边框样式 
dg.BorderWidth=0; 
dg.CellSpacing=1; 
dg.CellPadding=5; 
dg.ItemStyle.CssClass="item";//普通列样式 
dg.HeaderStyle.CssClass="header";//头样式 
dg.PagerStyle.CssClass="header";//页脚样式 
dg.DataKeyField="staff_id";//主键字段 
dg.AllowPaging=true;//允许分页 
dg.PageSize=500;//分页大小 
dg.PagerStyle.Mode=PagerMode.NumericPages;//数字形式分页 
BoundColumn col1 = new BoundColumn();
col1.DataField = "staff_id";
col1.HeaderText = "员工ID";
dg.Columns.Add(col1);
             SqlDataReader dr; //存放数据
Database db = new Database();
db.RunProc("sp_hr_getstafflist2",out dr);
DataTable dt =Tools.ConvertDataReaderToDataTable(dr);
dg.DataSource = dt.DefaultView;
dg.DataBind();
Page.Controls[1].Controls.Add(dg);
谢谢各位大哥,这是我的代码,能创建普通列.但不能创建模板列,还有就是我想双击一行,弹出窗口,应该怎样做? --------------------编程问答-------------------- 太强了,
DataGrid用的真是炉火纯青!
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,