我为datagrid添加了一个编辑列,运行后,第一次按编辑按钮无效,以后每次按,都是
  使上一次所按的按钮所在的行进入编辑状态,比如我第一次按下第m行的按钮,页面重载
  一次没变化,我再按第n行的按钮,页面重载一次,第m行进入编辑状态...  请问是怎么回事呢?
   代码如下:
    private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.DataGrid1.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_CancelCommand);
this.DataGrid1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_EditCommand);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void Button1_Click(object sender, System.EventArgs e)
{  //读取数据库 System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
conn.ConnectionString = Application["connStr"].ToString();
conn.Open(); string select = "select 学号,姓名 from classes where 班号='"+classNo+"' and 班级类型='"+classType+"'";
OleDbDataAdapter da = new OleDbDataAdapter(select,conn);
DataTable dt = new DataTable();
da.Fill(dt);
DataGrid1.DataSource = dt;
DataGrid1.DataBind();
conn.Close();
}
} private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex = e.Item.ItemIndex;
}

解决方案 »

  1.   

    一般在editcommandindex赋值后都要再databind下!!!
      

  2.   

    System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
    conn.ConnectionString = Application["connStr"].ToString();
    conn.Open(); string select = "select 学号,姓名 from classes where 班号='"+classNo+"' and 班级类型='"+classType+"'";
    OleDbDataAdapter da = new OleDbDataAdapter(select,conn);
    DataTable dt = new DataTable();
    da.Fill(dt);
    DataGrid1.DataSource = dt;
    DataGrid1.DataBind();
    conn.Close();
    这个暂时可以弄成一个函数比方是dgBind()这样你可以再editcommand事件里面
    {
        DataGrid1.EditItemIndex = e.Item.ItemIndex;
        dgBind();                 
    }
      

  3.   

    哦!谢谢!不过必须要重新bind一下吗? 岂不会降低效率?没有别的办法了吗?
      

  4.   

    这个是必须的!!!!,当然你可以把查询到的dataset缓存下来
    !但是更新以后还是得重新查询重新bind
      

  5.   

    那你可以尝试用    DataGrid1.EditItemIndex = e.Item.ItemIndex;
                      DataGrid1.DataBind();
    反正你就是缺个Databind()