C# 首次单击ASP.NET控件不会触发单击事件

C# 首次单击ASP.NET控件不会触发单击事件,c#,asp.net,gridview,C#,Asp.net,Gridview,我在我的两个页面上看到了这种行为,但我只想问一下目前对我来说更重要的行为。我有一个页面,它将数据库中的信息加载到ASP gridview中,然后允许用户向每个填充的行添加详细信息 我遇到的问题是,当gridview的“编辑”按钮,然后是“更新”或“取消”按钮时,实际上需要两次单击才能触发onclick事件。在第一次单击时确实会发生回发,但实际上什么也没有发生 我在下面包含了似乎相关的代码。该页面使用母版页,并且有许多div涉及格式化,我不包括这些div Gridview和相关控件: <as

我在我的两个页面上看到了这种行为,但我只想问一下目前对我来说更重要的行为。我有一个页面,它将数据库中的信息加载到ASP gridview中,然后允许用户向每个填充的行添加详细信息

我遇到的问题是,当gridview的“编辑”按钮,然后是“更新”或“取消”按钮时,实际上需要两次单击才能触发onclick事件。在第一次单击时确实会发生回发,但实际上什么也没有发生

我在下面包含了似乎相关的代码。该页面使用母版页,并且有许多div涉及格式化,我不包括这些div

Gridview和相关控件:

<asp:UpdatePanel runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Label Text="Plant Selector:  " runat="server" />
        <asp:DropDownList ID="ddlPlant" OnSelectedIndexChanged="ddlPlant_SelectedIndexChanged" runat="server" />
        <asp:Button ID="btnUpdate" Text="Update" OnClick="btnUpdate_Click" runat="server" />
        <p />
        <asp:Label ID="lblTest" Text="" runat="server" />
        <asp:Label ID="lblerror" Text="" ForeColor="Red" runat="server" />
        <asp:GridView ID="gridview1" AutoGenerateColumns="false" runat="server" OnRowEditing="gridview1_RowEditing" OnRowCancelingEdit="gridview1_RowCancelingEdit" OnRowUpdating="gridview1_RowUpdating">
            <Columns>
                <asp:BoundField DataField="JobNum" HeaderText="Job Number" ReadOnly="true" />
                <asp:BoundField DataField="ModelNum" HeaderText="Model" ReadOnly="true" />
                <asp:BoundField DataField="Customer" HeaderText="Customer" ReadOnly="true" />
                <asp:BoundField DataField="SchCompDate" HeaderText="Sch Comp Date" ReadOnly="true" />
                <asp:TemplateField HeaderText="Details">
                    <EditItemTemplate>
                        <asp:TextBox ID="Txt" Width="98%" runat="server" />
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label Text="Click Edit to add details of exception." runat="server" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:CommandField ShowEditButton="true" />
            </Columns>
       </asp:GridView>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="gridview1" />
    </Triggers>
</asp:UpdatePanel>
以下是我尝试过的:

-很多文章都看到这种行为与控件的自动回写设置有关。正如您所看到的,我确保在autopostback设置为true时没有任何控件

-我曾担心该行为可能与updatepanel有关,但删除它根本不会改变该行为

-我了解到页面标记中的AutoEventWireup=true可能会导致这种情况。我的页面标签中确实有这样的内容,但将其设置为false并不能解决问题,也无法在页面加载时填充下拉列表

-有另一篇文章表明控件的ID可能在页面加载和回发之间发生变化。我监控了这些控件的ID,没有发现它们的ID有任何变化

尽管如此,我还是希望有人能知道我遗漏了什么。如果我能提供更多可能有用的信息,请告诉我


提前谢谢。

试试这个,它将使网格可编辑

protected void gridview1_RowEditing(object sender, GridViewEditEventArgs e)
{
   GridView1.EditIndex = e.NewEditIndex;
   BindData();
}
也要取消吗

protected void gridview1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
    gridview1.EditIndex = -1;
    BindData();
}

当它在第一次单击时发回除page_load之外正在触发的事件时,它可以将断点放在所有其他事件上并查看?我看到的唯一正在触发的事件是gridview1_RowEditing事件。因此,单击edit按钮,它将转到RowEditing,网格在第一次单击期间不会更改为编辑模式。正确,只有第二次。再次单击“取消”按钮进入编辑模式后,会重复此行为。这确实解决了问题。但我还是不明白为什么会发生这种事。非常感谢。问题是,当您单击“编辑”时,并没有将网格设置为编辑模式,这就是它不工作的原因。但是在第二次点击时,它将进入编辑模式。我不知道:是的,这是让我困惑的部分。你会认为它根本不起作用。
protected void gridview1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
    gridview1.EditIndex = -1;
    BindData();
}