<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Update" CancelText="Cancel" EditText="Edit"></asp:EditCommandColumn>
各位大哥帮帮我,搞了很久,我快疯了~!

解决方案 »

  1.   

    看看你的“更新”按钮是不是写在EditItemTemplate中的。
      

  2.   

    写了这个没:
    <Columns>
            <asp:EditCommandColumn EditText="编辑" CancelText="取消" UpdateText="更新" ItemStyle-Wrap="false"/>
          </Columns>
      

  3.   

    tryAdd Button's Atrribute: CommandName="Update"
      

  4.   

    写在<Columns>里的啊
    CommandName在哪里设置?
    我看我和ms的例子一样的啊,它是对的我久不可以,郁闷~!
      

  5.   

    你看一下你的绑定事件是否放在Page.IsPostBack中,如果不是的话,把它放进去!!
      

  6.   

    你看一下你的绑定事件是否放在Page.IsPostBack中,如果不是的话,把它放进去!!if (!IsPostBack)
             BindGrid(); 
                      
       }
      

  7.   

    把你的程序贴出来看看,包括绑定和DataGrid的申明!
      

  8.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    list=TUser.Find(-1);
    UserClass.Items.Clear();
    for(int i=0;i<KUser.count;i++)
    {
    UserClass.Items.Add(new ListItem(KUser.GetName(i),i.ToString()));
    }
    bool bValid=true;
    if(Session["class"]==null)
    bValid=false;
    if(Convert.ToInt32(Session["class"])<2)
    bValid=false;
    if(!bValid)
    Response.Redirect("error.htm");
    BindGrid();
    }
    public void BindGrid()
    {
    DataTable dt=new DataTable();
    DataRow dr; dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
    dt.Columns.Add(new DataColumn("Name", typeof(string)));
    dt.Columns.Add(new DataColumn("Password", typeof(string)));
    dt.Columns.Add(new DataColumn("EMail", typeof(string)));
    dt.Columns.Add(new DataColumn("Class", typeof(Int32))); for(int i=0;i<list.Count;i++) 
    {
    dr=dt.NewRow();
    dr["ID"]=((DUser)(list[i])).ID;
    dr["Name"]=((DUser)(list[i])).Name;
    dr["Password"]=((DUser)(list[i])).Password;
    dr["EMail"]=((DUser)(list[i])).EMail;
    dr["Class"]=((DUser)(list[i])).Class;
    dt.Rows.Add(dr);
    }
    MyDataGrid.DataSource=dt.DefaultView;
    MyDataGrid.DataBind();
    } public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
    {
    int id=Convert.ToInt32(MyDataGrid.DataKeys[(int)e.Item.ItemIndex]);
    DUser u=new DUser();
    u.ID=id;
    u.Name=((TextBox)e.Item.Cells[1].Controls[0]).Text;
    u.Password=((TextBox)e.Item.Cells[2].Controls[0]).Text;
    u.EMail=((TextBox)e.Item.Cells[3].Controls[0]).Text;
    u.Class=Convert.ToInt32(((DropDownList)e.Item.Cells[4].Controls[0]).SelectedItem.Value);
    if(!TUser.Modify(u))
    Message.Text="Update failed!";
    else
    Message.Text="Update successfully!";
    list=TUser.Find(-1);
    MyDataGrid.EditItemIndex = -1;
    BindGrid();
    } public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E) 
    {
    Message.Text=E.CommandName;
    MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex;
    BindGrid();
    DropDownList tempList = (DropDownList)MyDataGrid.Items[E.Item.ItemIndex].FindControl("edit_Class");
    tempList.Items.Clear();
    for(int i=0;i<KUser.count;i++)
    tempList.Items.Add(new ListItem(KUser.GetName(i),i.ToString()));
    }
    public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e)
    {
    MyDataGrid.EditItemIndex = -1;
    BindGrid();
    }
      

  9.   

    <ASP:DataGrid id="MyDataGrid" runat="server" Width="700px" 
    BackColor="#CCCCFF" 
    BorderColor="Black" 
    CellPadding="3" 
    Font-Name="宋体" 
    Font-Size="8pt" 
    HeaderStyle-BackColor="#aaaadd" 
    EnableViewState="False" 
    OnUpdateCommand="MyDataGrid_Update"
    OnEditCommand="MyDataGrid_Edit"
    OnCancelCommand="MyDataGrid_Cancel"
    AutoGenerateColumns="False"
    DataKeyField="ID"
    Font-Names="宋体" PageSize="20" AllowPaging="True">
    <Columns>
    <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Update" CancelText="Cancel" EditText="Edit" ItemStyle-Wrap="false"/>
    <asp:BoundColumn DataField="ID" ReadOnly="True" HeaderText="ID"/>
    <asp:TemplateColumn HeaderText="Name">
    <ItemTemplate>
    <asp:Label runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"Name")%>' />
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox runat="server" id="edit_Name" Text='<%#DataBinder.Eval(Container.DataItem,"Name")%>'/>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Password">
    <ItemTemplate>
    <asp:Label runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"Password")%>' /> </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox runat="server" id="edit_Password" Text='<%#DataBinder.Eval(Container.DataItem,"Password")%>'/>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="EMail">
    <ItemTemplate>
    <asp:Label runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"EMail")%>' />
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox runat="server" id="edit_EMail" Text='<%#DataBinder.Eval(Container.DataItem,"EMail")%>'/>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Class">
    <ItemTemplate>
    <asp:Label runat="server" Text='<%#KUser.GetName((int)DataBinder.Eval(Container.DataItem,"Class"))%>' />
    </ItemTemplate>
    <EditItemTemplate>
    <asp:DropDownList runat="server" id="edit_Class" SelectedIndex='<%#DataBinder.Eval(Container.DataItem,"Class")%>'/>
    </EditItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </ASP:DataGrid>
      

  10.   

    靠,代码贴乱了~!
    list是个ArrayList
      

  11.   

    可能由于你使用了EditItemTemplate,所以EditCommandColumn会失去作用。
    你可以在EditItemTemplate加入更新按钮
    <ASP:Button CommandName="Update" id='UpdateButton' Text="Update" runat="server"  />
    这样做还有个好处就是可以对验证输入值!
      

  12.   

    可能由于你使用了EditItemTemplate,所以EditCommandColumn会失去作用。
    你可以在EditItemTemplate加入更新按钮
    <ASP:Button CommandName="Update" id='UpdateButton' Text="Update" runat="server"  />
    这样做还有个好处就是可以对验证输入值!
      

  13.   

    谢谢
    问题是为什么QuickStart的例子是对的,他也用EditItemTemplate
      

  14.   

    if (!IsPostBack)
                BindGrid();你真是这样写的??
      

  15.   

    if (!IsPostBack)
                BindGrid();你确认是这样写的吗?
      

  16.   

    if (!IsPostBack)
                BindGrid();
    你确信是这样写的吗?
      

  17.   

    没有
    我没有判断,判断的话我发现就什么也没有了,因为我点Edit时候,首先调用了Page_OnLoad(),我怀疑事件调用混乱了~!
      

  18.   

    就是这个原因了,如果不在!IsPostBack中绑定,页面每次都重新绑定。只有把绑定放在!IsPostBack中时,才能update ~
      

  19.   

    就是这个原因了,如果不在!IsPostBack中绑定,页面每次都重新绑定。只有把绑定放在!IsPostBack中时,才能使用更新 ~
      

  20.   

    我也发现了,吧EnableViewState="False" 去掉就好了
    非常感谢yellowwee(端木柒)!