前台代码:
        <asp:DataList ID="DataList1" runat="server" RepeatColumns="5" 
         OnDeleteCommand="DataList1_DeleteCommand" OnCancelCommand="DataList1_CancelCommand" 
         OnEditCommand="DataList1_EditCommand" OnUpdateCommand="DataList1_UpdateCommand">
         
         
        <ItemTemplate>
        <asp:Image ID="image1" runat="server" ImageUrl='<%# Eval("TupianPath")%>'/><br />
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("TupianName") %>'></asp:Label><br />
        <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Edit">编辑</asp:LinkButton>
        <asp:LinkButton ID="LinkButton2" runat="server"  CommandName="Delete">删除</asp:LinkButton>
        </ItemTemplate>
        
        
        <EditItemTemplate>
        <asp:Image ID="image1" runat="server" ImageUrl='<%# Eval("TupianPath")%>'/><br />
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("TupianName") %>'></asp:TextBox><br />
        <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Update">更新</asp:LinkButton>
        <asp:LinkButton ID="LinkButton2" runat="server" CommandName="Cancel">取消</asp:LinkButton>
        </EditItemTemplate> 
        
        </asp:DataList>
后台代码:
    protected void Page_Load(object sender, EventArgs e)
    {
      String LB = Request.QueryString["LB"].ToString();
      AdoClass ac = new AdoClass();
      String sqlstr = "SELECT * FROM Tupian WHERE LBID='" + LB + "'";
      DataSet ds = ac.GetDs(sqlstr, "TP");
      DataList1.DataSource = ds;
      DataList1.DataKeyField = "TupianID";
      DataList1.DataBind();           }    protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
    {
       String id = DataList1.DataKeys[e.Item.ItemIndex].ToString();
       String sqlstr = "Delete From Tupian Where TupianID='" + id + "' ";
       AdoClass ac = new AdoClass();
       SqlCommand cmd = ac.GetCmd(sqlstr);
       DataList1.DataBind();    }    protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
    {
        DataList1.EditItemIndex = e.Item.ItemIndex;
        DataList1.DataBind();
    }    protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e)
    {        DataList1.EditItemIndex = -1;
        DataList1.DataBind();    }    protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
    {        String id = DataList1.DataKeys[e.Item.ItemIndex].ToString();
        String a = ((TextBox)e.Item.FindControl("TextBox1")).Text;
        String sqlstr = "Update Tupian Set TupianName='" + a + "' Where TupianID='" + id + "'";
        AdoClass ac = new AdoClass();
        SqlCommand cmd = ac.GetCmd(sqlstr);
        DataList1.EditItemIndex = -1;
        DataList1.DataBind();
    }编辑和取消功能倒正常,删除和更新点了没反应。
String id = DataList1.DataKeys[e.Item.ItemIndex].ToString();
String sqlstr = "Delete From Tupian Where TupianID='" + id + "' ";改成
String id = DataList1.DataKeys[e.Item.ItemIndex].ToString();
String sqlstr = "Delete From Tupian Where TupianID=" + id ;

int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);
String sqlstr = "Delete From Tupian Where TupianID='" + id + "' ";

int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);
String sqlstr = "Delete From Tupian Where TupianID=" + id;

int id = (int)DataList1.DataKeys[e.Item.ItemIndex];
String sqlstr = "Delete From Tupian Where TupianID='" + id + "' ";

int id = (int)DataList1.DataKeys[e.Item.ItemIndex];
String sqlstr = "Delete From Tupian Where TupianID=" + id;都没用..........应该不是格式的问题吧 TupianID是Tupian表的主键,Tupian表还有TupianPath、TupianName等字段
 
        

解决方案 »

  1.   

    Page_Load中加上IsPostBack判断。
    我上次也是这样的问题。
      

  2.   

    加了Ispostback也没用,编辑模板里的eval改成bind也没用~~~~~
      

  3.   

    首先,是应该加上IsPostBack的。
    好像你每次重新绑定数据都没有获取最新数据吧。好像是只更新了数据库,没有重新获取数据
      

  4.   

    protected void DataList1_EditCommand(object source, DataListCommandEventArgs e) 

      DataList1.EditItemIndex = e.Item.ItemIndex; 
      Bind(); 

    protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e) 

    int productID = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]); TextBox txtName = (TextBox)e.Item.FindControl("txtName"); DataList1.EditItemIndex = -1; 
    Bind(); 

    protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e) 

    int ID = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]); Bind(); 

      

  5.   

    数据库都没有更新?
    调试的时候执行sql语句了吗?编辑后点击更新,看看sql语句是什么,看看是否执行了DataList1_UpdateCommand函数
      

  6.   

    Page_Load里的代码加上if(!IsPostBack) 
    点任何按钮DataList就会变成空白
      

  7.   

    从你的学习方法来看,懒得看你的问题到底是什么。因为asp.net2.0以上的程序,必须在page_load的的绑定代码放在 IsPostback 判断中,这是常识。你懒得理解常识,我也懒得理这个问题了。如果你愿意理解为什么是常识,就会去理解深入一点的机制,编程就方便一点。
      

  8.   

    我肯定试了判断回转了的,说了把pageload的代码放如ispostback里 控件里点击任何按钮DataList就会变空白  
    楼上的很喜欢讥讽新手么??
      

  9.   

    你的DATALIST数据源是DS,而DS是从你的AdoClass类里面获取出来的,并没有绑定到数据库啊,你每次操作都是对内存中的DS进行修改了,而DS并没有绑定数据库,数据库当然不会更新了。
      

  10.   

    图片ID的数据类型是什么,你有的SQL是字符串,有的又成了数值型,到底是什么类型?
    其次你的DATALIST的数据源是内存中的DS,你每次更新DATALIST之前没有更新DS啊。
    你的删除操作,调用了AdoClass的方法,如果SQL的TUPIANID是字符串的话,至少数据库里应该更新了,很可能这个ID是整数型的,导致SQL失败。而且删除方法里的DATALIST重新绑定之前没有刷新内存中的DS,很明显你的直接数据源不是AdoClass,所以即使AdoClass更新了,你不更新DS,也是绑定不到数据的。
    编辑方法也是同一个毛病,你的直接数据源明明是内存里的DS,而不是数据库,你对着内存修改他要能更新数据库可真闹鬼了。
      

  11.   

    用一句成语概括,你的做法就是画蛇添足,出力不讨好,本来直接绑定个数据源就一切OK了,非要中间加一个DS,不但累赘而且也阻断了数据库的绑定,何苦呢?何必呢?