to  yarshray(saga jion) 
只要我调用了bindgrid()就要用   if (!ispostback)
    BindGrid();       
吗?我在page_load()中用了if (!ispostback),但其它的地方没有用,不行吗?

解决方案 »

  1.   

    别的地方可以不用
    但这一句绝对不可以少!
    BindGrid();       
    否则你绝对不可以显示!
      

  2.   

    page_load()是第一次登录是要访问的过程,
    那页面每刷新一次,都要访问page_load()吗?
      

  3.   

    是的,先执行Page_Load,然后才执行引起返回的事件(比如DataGrid的ItemCommand事件等)
    一般的做法是,在Page_Load中用
    if (!IsPostBack)
    { BindGrid(); }
    然后,在ItemCommand事件中再次调用BindGrid();函数(包括设置DataSource属性和执行DataBind()方法,而不仅仅是执行DataBind()方法就可以的)。
      

  4.   

    to icyer()
     
    那我再次在ItemCommand事件中调用BindGrid();函数时, 还用
      if (!IsPostBack)
      { BindBrid(); }   吗?
      

  5.   

    不用了,
    直接调用BindBrid(); 方可
      

  6.   

    可是为什么看不到datagrid呀,我的程序一直有if (!IsPostBack), 就是用按钮刷新后看不到datagrid, Why?
      

  7.   

    会不会是viewstate disable掉了
      

  8.   

    你的BindGrid()是怎样写的?如果dataGrid.DataSource=DataSet,那你的dataSet在点击按钮后应该是空的,这样dataGrid.DataSource=null,就看不到DataGrid了。
      

  9.   

    to castaway()
    我的BindGrid()是这么写的:
    DataGrid1.DataSource = mydataSet.Tables["MyZongDui"].DefaultView;
    这样行不行呀,dataset还会空吗?
    不过我的dataset却实是空的呀!应该怎么写?
      

  10.   

    试一试把dataSet保存到Session里面吧。在添加了新项后,把dataSet保存到Session,如Session["myDataSet"] = (object)mydataSet,以后要用的时候再读出来mydataSet = (DataSet)Session["myDataSet"];
      

  11.   

    不行呀,这么写有错误:C:\Inetpub\wwwroot\btapp\zdlr.aspx.cs(265): 名称“session”在类或命名空间“btapp.zdlr”中不存在原句为:session["mydataSet"] = (object)mydataSet;
            mydataSet = (DataSet)session["mydataSet"];怎么表达呀?
      

  12.   

    应该用
    mydataSet=(btapp.DataSet1)Session["mydataSet"]
      

  13.   

    不行,还是不能把新记录添加到datagrid中,什么原因呢?
      

  14.   

    为什么数据加不到datagrid中呀,dataset好象是空的,即便我库中有数据,dataset也没有,怎么将库中的数据显示到dataset中呀?
      

  15.   

    在BindGrid()函数中加入:
    SqlConnection conn = new SqlConnection("....");
    conn.Open()
    SqlDataAdapter da = new SqlDataAdapter("select * from ..", conn);
    DataSet ds = new DataSet();
    da.Fill(ds);
    dataGrid.DataSource=ds;
    dataGrid.DataBind();
      

  16.   

    to icyer
    我按照你的方法做了些修改,可还是不行,总是说:错误:未能添加记录,请确保正确填写了字段可我的字段都是字符串,并没有什么错误呀?我的把表结构给你看看:[id]       char   10
    [Name]     char   50
    [address]  char   100
    [gxfw]     varchar   50
    [rysl]     varchar   50我只随便输入一些字符串调试,但总说输入不正确,why? 急,帮忙看看!!
      

  17.   

    在global.asax的Session_Start函数中添加Session["myDataSet"].
      

  18.   

    这么用不对呀?错误如下:C:\Inetpub\wwwroot\btapp\Global.asax.cs(26): 只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句
      

  19.   

    不会哦,
    protected void Session_Start(Object sender, EventArgs e)
    {
        Session["myDataSet"]=null;
    }
    不会有问题哦。
    把你添加纪录的代码贴出来看看。
      

  20.   

    private void Button1_Click(object sender, System.EventArgs E)
    {
    if (Textzdbh.Text == "" || Textzdmc.Text == "")
    {
       Message.Text = "错误: '中队编号'、'中队名称'不允许使用空值!";
       Message.Style["color"] = "red";
                   BindGrid();
    return;
    }
                
    String insertCmd = "insert into MyZongDui (ID,theName,Address,GXFW,RYSL) values (@ID,@Name,@Address,@GXFW,@RYSL)";
                SqlCommand myCommand = new SqlCommand(insertCmd,mysqlConnection);  myCommand.Parameters.Add(new SqlParameter("@ID",SqlDbType.VarChar,10));
    myCommand.Parameters["@ID"].Value = Textzdbh.Text; myCommand.Parameters.Add(new SqlParameter("@Name",SqlDbType.VarChar,50));
    myCommand.Parameters["@Name"].Value = Textzdmc.Text; myCommand.Parameters.Add(new SqlParameter("@Address",SqlDbType.VarChar,100));
    myCommand.Parameters["@Address"].Value = Textzddz.Text; myCommand.Parameters.Add(new SqlParameter("@GWFW",SqlDbType.VarChar,50));
    myCommand.Parameters.Add("@GXFW",SqlDbType.VarChar,50).Value = Textgxfw.Text; myCommand.Parameters.Add(new SqlParameter("@RYSL",SqlDbType.VarChar,50));
    myCommand.Parameters["@RYSL"].Value = Textrysl.Text; Session["mydataSet"] = (object)mydataSet; myCommand.Connection.Open(); try
    {
    myCommand.ExecuteNonQuery();
    mydataSet = (btapp.DataSet1)Session["mydataSet"];
    Message.Text = "<b>已添加记录</b><br>" + insertCmd.ToString();
    }
    catch (SqlException e)
    {
    if (e.Number == 2627)
    Message.Text = "错误:已存在具有相同主键的记录";
    else
    Message.Text = "错误:未能添加记录,请确保正确填写了字段";
    Message.Style["color"] = "red";
    } myCommand.Connection.Close(); BindGrid();
    }
      

  21.   

    试试
    DataRow dr;
    dr = DataSet1.Tables["MyZongDui"].NewRow();
    dr["ID"] = Textzdbh.Text;
       ............
    DataSet1.Tables["MyZongDui"].Rows.Add(dr);
    SqlCommandBuilder myCommand = new SqlCommandBuilder(sqlDataAdapter1);
    sqlDataAdapter1.InsertCommand = myCommand.GetInsertCommand();
    sqlDataAdapter1.Update(DataSet1,"MyZongDui");
      

  22.   

    这么写运行后,填加数据时会出现如下错误:异常详细信息: System.ArgumentException: 列“ID”不属于表 MyZongDui。
      

  23.   

    试试直接执行SQL语句,不用这种动态的。
      

  24.   

    将列“ID”设置为自动增加。当执行添加记录后,应该重新BindGrid()
      

  25.   

    刚才的问题我换成中文的字段名就行了。我用楼上castaway() 兄的方法已经添加了数据,但只能添加一个记录,添加第二个记录时就把第一个记录给覆盖了,Why?而且我点击编辑按钮时,datagrid就消失了,是BindGrid()的问题,还是DataGrid1_Edit的问题呢?private void DataGrid1_Edit(Object sender, DataGridCommandEventArgs e)
    {
    DataGrid1.EditItemIndex = (int)e.Item.ItemIndex;
    BindGrid();
    }
    public void BindGrid()
    {

    SqlConnection mysqlConnection = new SqlConnection("data source=angel;initial catalog=119;integrated security=SSPI;persist security info=False;workstation id=ANGEL;packet size=4096");
    mysqlConnection.Open();
    SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter("select * from MyZongDui", mysqlConnection);
                  
    DataSet mydataSet = new DataSet();
    sqlDataAdapter1.Fill(mydataSet, "MyZongDui");
                  
    DataGrid1.DataSource = mydataSet.Tables["MyZongDui"].DefaultView;
    DataGrid1.DataBind();
    }
      

  26.   

    my sqladaptor.fill(mydataset)
    my datagrid.databing()大概是这样反正 更新后还要再一次绑定上去