一个SqlDataSource,它的select insert update delete都设置好。
再放一个gridview
如果在设计状态把GridView通过智能标记设置数据源为:SqlDataSource1。在程序运行后,一切正常。可以进行以上四种操作。
但是,在设置状态不为GridView设置数据源,而在程序中设置:Page_Load中设置。
GridView1. DataSource = SqlDataSource1;
GridView1. DataBind();那么。将不能更新数据。请问是为什么?如果将绑定写在其它事件中,又如何每次刷新页面看到数据?

解决方案 »

  1.   

    Page_Load中绑定数据源,要写update代码,更新完后重新绑定
      

  2.   

    要想在后台绑定gridview并更新删除要写相关代码的,不能直接用,提供一段删除操作
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            int index = e.RowIndex;
            int LogID = (int)GridView1.DataKeys[index].Value;//取主键
            用这个主键做操作
        }
      

  3.   

    弄了好久,也没整出最终结果,就一些发现:
    要想在后台绑定GridView的数据源,而且要更新,
    要实现GridView的事件OnRowEditing,加了以后就不会报错了,但是没有编辑功能。
    要想编辑,我估计要在GridView的OnRowDataBound事件里自己处理,
    把TextBox啊什么的手动加上去,然后绑定数据。
    能力有限,期待高手指点。
      

  4.   

    放在Page_PreInit事件下面看看呢
      

  5.   

    我这边的方法比较笨。只能说实现了,但我觉得不科学:也就是手动写更新代码。
    用edittemplate,然后当更新操作时,手动取得控件值,再用sqldatasource.updata更新。
    只是这样比较笨。我想不通为什么通过程序绑定和设计状态绑定不一样。
      

  6.   

    是不是要选中那个AllowEdit复选框啊,还要写一个OnRowUpdating事件啊!
      

  7.   

    GridView1.DataSourceID = SqlDataSource1;
      

  8.   

    你把他的insertcommand,up......四个Command都对应上试试,我没用过2005
      

  9.   

    会不会是Page_Load加载的时候SqlDataSource1为空?
    ___________________________________________________
     我也刚学` 说错了莫怪
      

  10.   

    要绑定主键才可以this.GridView1.DataKeyNames = new string[] { "ID" };
      

  11.   

    楼主试试使用DataSet或DataTable用做数据绑定
      

  12.   

    谁有Gmail  的邀请函,
      

  13.   

    看你的意思是要更换需要显示的数据了
    可以用c#更该  SqlDataSource 的select语句阿!
      

  14.   

    回:shu() 兄弟:
    要绑定主键才可以this.GridView1.DataKeyNames = new string[] { "ID" };还是不行。你可以试试。不知道你说的:"要绑定主键才可以",是肯定句还是问句?
      

  15.   

    回:shu() 兄弟:
    要绑定主键才可以this.GridView1.DataKeyNames = new string[] { "ID" };还是不行。你可以试试。不知道你说的:"要绑定主键才可以",是肯定句还是问句?
      

  16.   


    GridView1. DataSource = SqlDataSource1;
    GridView1. DataBind();
    放在IsPostBack中。你试一试吧,别的事件执行完之后,可以重新绑定GridView的。
      

  17.   

    回复:xbfitliu(阳光岁月) 
    GridView1. DataSource = SqlDataSource1;
    绑定的是sqldatasource设计状态的值。比如我的sqldatasource1.selectcommand改变了。那么页面刷新的时候,它又绑定到了原来的sqldatasource.selectommand。。
      

  18.   

    vAction() ( ) 信誉:100    Blog  2007-1-4 12:14:14  得分: 0  
     
    我想不通为什么通过程序绑定和设计状态绑定不一样。 ---------------------------我也没想明白。
    后台绑定非DataSource控件数据源的话要实现这两个方法
    GridView1_RowEditing,GridView1_RowUpdating
    可是现在绑定的是DataSource控件数据源,看起来感觉是应该一样的呀,
    我觉得那里有点不对劲,应该比较简单才对的。
    盼高手出马指点。
      

  19.   

    我已经找到答案了: protected void Page_Init(object sender, EventArgs e)
        {
            this.GridView1.DataSourceID = "AccessDataSource1";
        }这里指定,但是不能用DataSource,因为这个时候还不能访问其他控件。
      

  20.   

    Eri(阳光下的阴影).
    谢谢!果然。但还有一个问题。
    我在程序运行时动态修改了Select Updata等。但Updata好像没有效果。因为init的时候又绑定回了最初的sqldatasource1.你还有别的办法吗?
      

  21.   

    GridView1. DataSource = SqlDataSource1;
    GridView1. DataBind();
    这种写法根本就不是把GridView1绑定到SqlDataSource1,而仅仅是将SqlDataSource1进行了SELECT之后获得的数据绑定了,UPDATE/INSERT/DELETE方法根本没绑定。正确的等效写法:
    GridView1.DataSourceID = "SqlDataSource1";
    // 不需要执行DataBind();用ASP.NET 2.0,最好就用2.0的使用方式,不要再去用1.0手动提供DataSource再手动DataBind那套了。如果需要动态制订DataSource控件,就通过DataSourceID属性。
      

  22.   

    在pageload()中的语句是初始化页面时执行
    以后在gridview中的事件并不能与qlDataSource联系到一起
    2003中datagird进行更新操作时总是从新绑定,因为web状态是无序的,改了数据库要再绑一次才能显示
    页面里的gridview和qlDataSource相互独立了,触发gridview的事件SqlDataSource不会响应
    不知道怎样把他们联系到一起 ,updateing是事件在更新前触发是试试他吧
      

  23.   

    谢谢大家讨论,总算有了初步结果!.net2.0还需学习.谢谢大家!
      

  24.   

    vAction() ( ) 信誉:100    Blog  2007-1-6 21:37:27  得分: 0  
    我在程序运行时动态修改了Select Updata等。但Updata好像没有效果。因为init的时候又绑定回了最初的sqldatasource1.你还有别的办法吗?------------------------
    我这边测试过了,完全和在控件时候申明的一样呢,
    如果你Update不能更新,看看是不是没有指定DataKeyNames?
    我测试的时候是拖控件处理好所有的,然后在页面里面把GridView的DataSourceID这个属性给删掉,再在cs文件里指定的。
     
      

  25.   

    要重新定义的。。
    在05里有OnRowCancelingEdit,OnRowUpdating,诸如此类的东西的。。
    你去看下这个的帮助吧,你的情况我尝试过我是不想自己写编辑的代码但又不想就用向导来完成绑定
    最后还是老老实实的写代码吧