ASP.NET Gridview RowUpdating事件未触发

时间:2010-12-17 09:05:44

标签: c# asp.net events gridview

HTML页面

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
            <ContentTemplate>
                <asp:GridView ID="Grd_Threshold" runat="server" CellPadding="4" ForeColor="#333333"
                    GridLines="Both" AutoGenerateColumns="false" EmptyDataText="No Records." PageSize="8"
                    AllowPaging="true" OnPageIndexChanging="Grd_Threshold_PageIndexChanging" OnRowCommand="Grd_Threshold_RowCommand"
                    DataKeyNames="ID" AutoGenerateEditButton="true" OnRowCancelingEdit="Grd_Threshold_RowCancelingEdit" OnRowEditing="Grd_Threshold_RowEditing"
                    OnRowUpdating="Grd_Threshold_RowUpdating">
                    <Columns>                        
                        <asp:TemplateField HeaderText="No.">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Name" ItemStyle-Width="150px">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("CLNAME") + ", " + Eval("CFNAME") +" " +Eval("CMNAME")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Doctor" ItemStyle-Width="150px">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("DOCTORNAME")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Item Name" ItemStyle-Width="150px">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("INAME")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Item Form" ItemStyle-Width="100px">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("IFORM")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Item Strength" ItemStyle-Width="100px">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("ISTRG")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Order Date" ItemStyle-Width="100px">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("ORDERDATE")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Price" ItemStyle-Width="80px">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("PRICE")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Quantity" ItemStyle-Width="80px">
                            <EditItemTemplate>
                                <asp:TextBox ID="Txt_Qty" runat="server" Width="50px" Text='<%# Eval("QTY")%>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("QTY")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="User" ItemStyle-Width="100px">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("USERID")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                    <RowStyle BackColor="#E3EAEB" />
                    <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
                    <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
                    <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                    <EditRowStyle BackColor="#7C6F57" />
                    <AlternatingRowStyle BackColor="White" />
                </asp:GridView>
            </ContentTemplate>
        </asp:UpdatePanel>

CS代码:

 protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Title = "Dashboard";
                if (!Master.Page.IsPostBackEventControlRegistered)
                {
                    BindGrid();
                }
            }
            catch (Exception ex)
            {
                Common.WriteLog(ex);
            }
        }

        private void BindGrid()
        {
            try
            {
                if (SessionUtility.DashboardRecords == null || SessionUtility.DashboardRecords.Rows.Count == 0)
                {
                    string WebServiceUrl = SessionUtility.WebServiceUrl + "/GetAllOrders/";
                    JsonArrayCollection ReqResponse = Common.GetWebServiceResponse_MultipleValues(WebServiceUrl, "GET");
                    DataTable Patients = Common.ConvertJsonArrayObjectCollectionToDataTable(ReqResponse);

                    SessionUtility.DashboardRecords = Patients;
                }

                if (SessionUtility.UserRight != "1")
                {
                    //Grd_Threshold.Columns[0].Visible = false;
                    Grd_Threshold.AutoGenerateEditButton = false;
                }
                else if (SessionUtility.UserRight == "1")
                {
                    Grd_Threshold.AutoGenerateEditButton = true;
                }
                Grd_Threshold.DataSource = SessionUtility.DashboardRecords;
                Grd_Threshold.DataBind();
                UpdatePanel1.Update();
            }
            catch (Exception ex)
            {
                Common.WriteLog(ex);
            }
        }

大家好,

在上面的代码中,只有EDIT事件被触发&amp;在UPDATE之后只有一次,CANCEL没有事件被解雇。我做错了什么?我想要做的就是根据在QTY字段中输入的值更改GridRow颜色。

2 个答案:

答案 0 :(得分:3)

我弄明白了这个问题。事件没有触发,因为我在每一行中给了Label相同的ID。希望这对某人有帮助。

答案 1 :(得分:0)

不确定您对IsPostBackEventControlRegistered的使用情况 - 我之前没有看到它使用过,但似乎您每次DataBind()都可能会Page_Load()删除更新事件。

每次页面加载时都会触发

Page_Load,然后通过重置网格来更改页面正在执行的操作。

尝试将控件包装在:

if(!IsPostBack)
{
  // bind
}

所以它只在第一页加载时执行此操作。