我在用户控件中动态创建了datagrid,然后在页面上有一个按钮,作用是删除datagrid中多选的数据,结果按钮一按,datagrid就不见了,哪位大哥帮忙解决下,谢谢!!

解决方案 »

  1.   

    回传的问题!!
    加上
    if(!IsPostBack)
    {
      //动态创建datagrid的代码
    }
      

  2.   

    你把数据都删了datagrid绑定空的dataset好像不显示吧??
      

  3.   

    namespace SZNRC.Enterprise
    {
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    using SZNRC.Common;
    using System.Web.UI; /// <summary>
    /// maginfo 的摘要说明。
    /// </summary>
    public class maginfo : System.Web.UI.UserControl
    { public static int i=new int();
    public static string[] uid=new string[5];
    protected System.Web.UI.WebControls.Panel Panel1;
    protected DataGrid MyData;
    protected System.Web.UI.WebControls.ImageButton ibtnDel;
    protected DataSet ds; private void Page_Load(object sender, System.EventArgs e)
    {
    if (uid==null)
    {
    uid[1]=""; }
    if(!Page.IsPostBack)
    {
    BindData();
    }
    }
    private void BindData()
    {
    SqlParameter[] para = {
      SqlHelper.MakeInParam("@uid",SqlDbType.VarChar,16,uid[1])
      };
    ds = SqlHelper.ExecuteDataset(SqlHelper.Connection,CommandType.StoredProcedure,"Sp_SelJobInfo",para);
    crestgrid("1");
    crestgrid("2");
    }
    public void crestgrid(string oid)
    {
    MyData=new DataGrid();
    MyData.ID=oid;
    Panel1.Controls.Add(MyData); 
    MyData.AutoGenerateColumns=false; 
    MyData.BorderWidth=1;
    MyData.CellSpacing=1;
    MyData.CellPadding=5;
    //加checkbox列
    TemplateColumn t0 = new TemplateColumn();
    t0.ItemTemplate= new ColumnTemplateExport();
    t0.HeaderText="选择";
    t0.HeaderStyle.Width=50;
    ///
    t0.ItemStyle.Width=50;
    MyData.Columns.Add(t0);

    //超链接列
    HyperLinkColumn hlc=new HyperLinkColumn();
    hlc.HeaderText="职位名称";
    hlc.HeaderStyle.Width=100; ///
    hlc.ItemStyle.Width=100;
    hlc.DataNavigateUrlField="OID";
    hlc.DataNavigateUrlFormatString="JobDetail.aspx?id={0}";
    hlc.Target="_blank";
    hlc.DataTextField="job_name";
    MyData.Columns.Add(hlc);
     
    //加普通列
    BoundColumn t1=new BoundColumn(); 
    t1.HeaderText="招聘人数";
    //t1.HeaderStyle.BackColor=Color.FromArgb(240,230,112);//底色
    //t1.HeaderStyle.ForeColor=Color.Red;   //字体颜色
    t1.HeaderStyle.Width=100;  
    ///
    t1.ItemStyle.Width=100;
    //t1.ItemStyle.BackColor=Color.Blue;
    t1.DataField="EmployeeNum" ;
    MyData.Columns.Add(t1);
    //发布时间列
    BoundColumn t2=new BoundColumn();
    t2.HeaderText="发布时间";
    t2.HeaderStyle.Width=100; ///
    t2.ItemStyle.Width=100;
    t2.DataField="promulgate_time";
    MyData.Columns.Add(t2);
    //有效时间列

    BoundColumn t3=new BoundColumn();
    t3.HeaderText="有效时间";
    t3.HeaderStyle.Width=100; ///
    t3.ItemStyle.Width=100;
    t3.DataField="effect_time";
    MyData.Columns.Add(t3); //修改数据列 HyperLinkColumn hl4=new HyperLinkColumn();
    hl4.HeaderText="修改";
    hl4.HeaderStyle.Width=100; ///
    hl4.Text="修改";
    hl4.DataNavigateUrlField="OID";
    hl4.DataNavigateUrlFormatString="ModifyJob.aspx?id={0}";
    hl4.Target="_blank";
    MyData.Columns.Add(hl4); //加按钮列
    ButtonColumn t5 = new ButtonColumn();
    t5.ButtonType=ButtonColumnType.LinkButton;
    t5.CommandName="公开";
    t5.Text="公开职位";
    MyData.Columns.Add(t5);

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

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器
    /// 修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.ibtnDel.Click += new System.Web.UI.ImageClickEventHandler(this.ibtnDel_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void ibtnDel_Click(object sender, System.Web.UI.ImageClickEventArgs e)
    { }
    } public class ColumnTemplateExport : ITemplate
    {
    public void InstantiateIn(Control container)
    {
    CheckBox cb = new CheckBox();
    cb.Text = "";
    cb.Checked=false;
    container.Controls.Add(cb);
    }
    }
    }
      

  4.   

    以上是用户控件,在页面里刷新不会有事,但是只要点击按钮datagrid就不见了,databind写在了if(!Page.IsPostBack)下。
      

  5.   

    是否因为你是动态创建后当你点击按钮后就消失了,如果你在mydata那里加上static看看
      

  6.   

    DataGrid 的 EnableViewState 置True了么?
      

  7.   

    把 if(!Page.IsPostBack) 删除掉。
      

  8.   

    删除 if  判断,也就是每一次都执行BindData(),应该能正常。可能你觉得这样“太重复”!这是你的代码逻辑不够细致造成的。在DataGrid中,它会在ViewState中保存所有自定义的Column的定义,以及所有的ItemStyle、PageSize、DataFieldName等等一大堆信息,唯一就是不保存Items内rng。所以,在 (!IsPostBack) 的状态下可以不重建那些已经保存在ViewState中的,但是必须重新给出数据源并且重新绑定数据。
      

  9.   

    我没有仔细看你的代码,不知道删除按钮时怎样返回带删除的数据的。看接口定义 System.Web.UI.ImageClickEventArgs e,这是后必须在这个事件之前重新创建DataGrid(只有绑定了数据才可能生成所有的行,所以你必须绑定数据)的所有Items,才能自动获取用户在浏览器上的多选的结果值。然后在这个事件中才可能遍历Items,根据用户多选结果到数据库中删除记录。删除之后,必须重新绑定DataGrid,以便立刻刷新显示删除之后剩下的数据集。
      

  10.   

    改一下:所以,在 (!IsPostBack) 的状态下可以不
    --------------------------------------->>
    所以,在 (IsPostBack) 的状态下可以不另外为什么有时候可以不在PageLoad中重新绑定DataGrid?这通常是因为页面及其简单(这往往是树上的简单例子,而不是实际系统中的),所有的事件全都是针对DataGrid的,所有事件参数中都返回了带出列的DataGrid的单行item,并且内部对DataGrid处理之后都重新绑定了 DataGrid。你的事件无法获得单个DataGridItem,因此必须先重建整个DataGrid以便获得用户在浏览器上针对多个DataGridItem操作的值。
      

  11.   

    我晕!!
    private void ibtnDel_Click(object sender, System.Web.UI.ImageClickEventArgs e)
    {
    }这里面这么是空的。你的点击事件什么都没执行的阿!
      

  12.   

    你的动态生成控件放在哪里生成的啊
    需要在IsPostBack下面。