<asp:DataGrid id="dgAdmin" runat="server" BorderColor="DarkGray" BorderWidth="2px" BorderStyle="Groove"
CellPadding="3" CellSpacing="0" Font-Name="Verdana" Font-Size="8pt" ShowFooter="False" BackColor="White"
AllowSorting="True" AutoGenerateColumns="False" DataKeyField="ShellInfoId" AllowPaging="True"
GridLines="Horizontal" OnEditCommand="DataGrid_Edit" OnCancelCommand="DataGrid_Cancel" OnUpdateCommand="DataGrid_Update"
OnDeleteCommand="DataGrid_Delete" PageSize="20">
<EditItemStyle Font-Underline="True" Font-Bold="True" ForeColor="#F7F7F7" BackColor="#738A9C"></EditItemStyle>
<AlternatingItemStyle BorderColor="#804000" BackColor="#D3F8F6"></AlternatingItemStyle>
<ItemStyle ForeColor="#4A3C8C" BorderColor="DarkGray" BackColor="White"></ItemStyle>
<HeaderStyle Wrap="False" BorderWidth="5px" ForeColor="Black" BorderColor="Magenta" BackColor="#6699FF"></HeaderStyle>
<Columns>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑">
<ItemStyle Wrap="False"></ItemStyle>
</asp:EditCommandColumn>
<asp:ButtonColumn Text="删除" CommandName="delete">
<ItemStyle Wrap="False"></ItemStyle>
</asp:ButtonColumn>
<asp:HyperLinkColumn DataNavigateUrlField="ShellInfoId" DataNavigateUrlFormatString="ShellType.aspx?Id={0}"
DataTextField="ShellName" SortExpression="ShellName" HeaderText="弹箭型号规格">
<HeaderStyle HorizontalAlign="Center" Width="120px"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:HyperLinkColumn>
<asp:TemplateColumn HeaderText="订弹量">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" Width="80px"></ItemStyle>
<ItemTemplate>
<asp:Label Runat=server Text='<%# DataBinder.Eval(Container.DataItem, "OrderTotalSum") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox Runat=server ID="tbOrderTotalSum" Width=50 Text='<%# DataBinder.Eval(Container.DataItem, "OrderTotalSum") %>'>
</asp:TextBox>
<asp:RequiredFieldValidator ID="RFV2" ControlToValidate="tbOrderTotalSum" Display="Dynamic" Runat="server">*</asp:RequiredFieldValidator>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="耗弹量">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" Width="80px"></ItemStyle>
<ItemTemplate>
<asp:Label Runat=server Text='<%# DataBinder.Eval(Container.DataItem, "ExpendTotalSum") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox Runat=server ID="tbExpendTotalSum" Width=50 Text='<%# DataBinder.Eval(Container.DataItem, "ExpendTotalSum") %>'>
</asp:TextBox>
<asp:RequiredFieldValidator ID="RFV3" ControlToValidate="tbExpendTotalSum" Display="Dynamic" Runat="server">*</asp:RequiredFieldValidator>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="库存量">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" Width="80px"></ItemStyle>
<ItemTemplate>
<asp:Label Runat=server Text='<%# DataBinder.Eval(Container.DataItem, "StockTotalSum") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="故障弹量">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" Width="80px"></ItemStyle>
<ItemTemplate>
<asp:Label Runat=server Text='<%# DataBinder.Eval(Container.DataItem, "FailureTotalSum") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox Runat=server ID="tbFailureTotalSum" Width=50 Text='<%# DataBinder.Eval(Container.DataItem, "FailureTotalSum") %>'>
</asp:TextBox>
<asp:RequiredFieldValidator ID="RFV4" ControlToValidate="tbFailureTotalSum" Display="Dynamic" Runat="server">*</asp:RequiredFieldValidator>
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
BindGrid();
}
}
private void BindGrid()
{
DataSet ds = hbry.Classes.Shell.GetShellInfo( int.Parse(this.dropDownListYear.SelectedValue), Session["OfficeName"].ToString() );

this.dgAdmin.DataSource = ds.Tables[0].DefaultView;
this.dgAdmin.DataBind();
} public void DataGrid_Edit(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
this.dgAdmin.EditItemIndex = (int)e.Item.ItemIndex;
BindGrid();
}
public void DataGrid_Cancel(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
this.dgAdmin.EditItemIndex = -1;
BindGrid();
}public void DataGrid_Delete(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string id = this.dgAdmin.DataKeys[(int)e.Item.ItemIndex].ToString() ; try
{
hbry.Classes.Shell.DeleteGroupShell( id );
this.dgAdmin.EditItemIndex = -1;
BindGrid();
this.lblInfo.Text = "删除成功!";
}
catch( Exception ex )
{
this.lblInfo.Text = "删除失败!" + ex.Message;
}
}

解决方案 »

  1.   

    是否Page_Load没if (!IsPostBack){}
      

  2.   

    Page_Load里if (!IsPostBack){ BindGrid(); } 设置了啊。。
      

  3.   

    把hbry.Classes.Shell.DeleteGroupShell( id );
    this.dgAdmin.EditItemIndex = -1;去掉
    BindGrid();
    在删除时判断是否为最后一条记录
    int lastpage=this.DataGrid1.CurrentPageIndex;
    if((this.DataGrid1.PageCount-this.DataGrid1.CurrentPageIndex)==1&&this.DataGrid1.Items.Count==1)
    {
    if(this.DataGrid1.PageCount>1)
    lastpage-=1;
    else
    lastpage=0; }
    this.DataGrid1.CurrentPageIndex=lastpage;
      

  4.   

    还是不行我设置AllowPaging="False" 试了也不行编辑 取消 更新 删除  单击一次, 它们对应的
    DataGrid_Edit DataGrid_Cancel DataGrid_Update DataGrid_Delete函数都执行了两次
      

  5.   

    没看出问题。太长了。你把程序复制,并且简化成尽量短,看看什么时候可以。你的页面没有什么不恰当的javascript,自动刷新之类的。
      

  6.   

    你的页面没有什么不恰当的javascript  -->  你的页面没有什么不恰当的javascript先把javascript通通删除,因为asp.net本身的控件还是比较成熟的。
      

  7.   

    hbry.Classes.Shell.DeleteGroupShell( id );
    这里面写的事什么
      

  8.   

    <asp:DataGrid id="dgAdmin" runat="server" BorderColor="DarkGray" BorderWidth="2px" 
         BorderStyle="Groove" CellPadding="3" CellSpacing="0" Font-Name="Verdana" 
         Font-Size="8pt" AutoGenerateColumns="False" DataKeyField="ShellInfoId" 
         GridLines="Horizontal" OnEditCommand="DataGrid_Edit"  
         OnCancelCommand="DataGrid_Cancel" OnUpdateCommand="DataGrid_Update"
         OnDeleteCommand="DataGrid_Delete" PageSize="20">
         <Columns>
             <asp:EditCommandColumn ButtonType="LinkButton"
                  UpdateText="更新" CancelText="取消" EditText="编辑">
                  <ItemStyle Wrap="False"></ItemStyle>
             </asp:EditCommandColumn>
             <asp:ButtonColumn Text="删除" CommandName="delete">
                  <ItemStyle Wrap="False"></ItemStyle>
             </asp:ButtonColumn>
             <asp:HyperLinkColumn DataNavigateUrlField="ShellInfoId"
                  DataNavigateUrlFormatString="ShellType.aspx?Id={0}"
                  DataTextField="ShellName" HeaderText="弹箭型号规格">
             </asp:HyperLinkColumn>
             <asp:TemplateColumn HeaderText="订弹量">
                <ItemTemplate>
                  <asp:Label Runat=server
                     Text='<%# DataBinder.Eval(Container.DataItem, "OrderTotalSum") %>'>
                  </asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                  <asp:TextBox Runat=server ID="tbOrderTotalSum" Width=50
                     Text='<%# DataBinder.Eval(Container.DataItem, "OrderTotalSum") %>'>
                  </asp:TextBox>
                </EditItemTemplate>
             </asp:TemplateColumn>
             <asp:TemplateColumn HeaderText="耗弹量">
                <ItemTemplate>
                  <asp:Label Runat=server
                     Text='<%# DataBinder.Eval(Container.DataItem, "ExpendTotalSum") %>'>
                  </asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                  <asp:TextBox Runat=server ID="tbExpendTotalSum" Width=50
                     Text='<%# DataBinder.Eval(Container.DataItem, "ExpendTotalSum") %>'>
                  </asp:TextBox>
                </EditItemTemplate>
             </asp:TemplateColumn>
          </Columns>
    </asp:DataGrid>
    ////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////
    private void Page_Load(object sender, System.EventArgs e)
    {
        if(!IsPostBack)
        {
             BindGrid();
        }
    }
    private void BindGrid()
    {
        DataSet ds = hbry.Classes.Shell.GetShellInfo( 
                     int.Parse(this.dropDownListYear.SelectedValue),
                     Session["OfficeName"].ToString());    this.dgAdmin.DataSource = ds.Tables[0].DefaultView;
        this.dgAdmin.DataBind();
    }public void DataGrid_Edit(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
         this.dgAdmin.EditItemIndex = (int)e.Item.ItemIndex;
         BindGrid();
    }
    public void DataGrid_Cancel(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
         this.dgAdmin.EditItemIndex = -1;
         BindGrid();
    }public void DataGrid_Delete(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
        string id = this.dgAdmin.DataKeys[(int)e.Item.ItemIndex].ToString() ;    try
        { 
             hbry.Classes.Shell.DeleteGroupShell( id );
             this.dgAdmin.EditItemIndex = -1;
             BindGrid();
         }
         catch( Exception ex )
         { .... }
    }
      

  9.   

    hbry.Classes.Shell.DeleteGroupShell( id ) 是删除数据库记录的函数应该不是这个的问题,因为DataGrid_Edit、DataGrid_Cancel、DataGrid_Update、DataGrid_Delete都是单击一下却执行了两次。页面没有javascript
      

  10.   

    谢谢各位朋友! 我找到原因了.aspx里和.aspx.cs里重复了:<asp:DataGrid id="dgAdmin" ......
         OnEditCommand="DataGrid_Edit"  OnDeleteCommand="DataGrid_Delete"  
         OnCancelCommand="DataGrid_Cancel" OnUpdateCommand="DataGrid_Update" >
         ... ...
    </asp:DataGrid>this.dgAdmin.CancelCommand += new
            System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_Cancel);
    this.dgAdmin.EditCommand += new
            System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_Edit);
    this.dgAdmin.UpdateCommand += new 
            System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_Update);
    this.dgAdmin.DeleteCommand += new 
            System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_Delete);
         我把OnEditCommand="DataGrid_Edit"  OnDeleteCommand="DataGrid_Delete" OnCancelCommand="DataGrid_Cancel" OnUpdateCommand="DataGrid_Update" 删除了就好了
      

  11.   

    this.dgAdmin.CancelCommand += new
            System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_Cancel);
    this.dgAdmin.EditCommand += new
            System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_Edit);
    this.dgAdmin.UpdateCommand += new 
            System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_Update);
    this.dgAdmin.DeleteCommand += new 
            System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_Delete);你最好把这个删除,把那个声明部分保留。上面这个是你手工增加的,不受设计其的属性/事件窗口支持。