为什么我的 itemCommand DataGrid 事件仅在第二次单击网格控件中的项目时触发?

我的 Web 表单数据网格响应点击事件时遇到问题。请允许我解释一下:

  1. 在第一次加载页面时,会填充一个下拉列表供用户选择一个项目。

  2. 当用户在下拉列表中选择一个项目时,会出现一个数据网格(称为 tmdg)(加载第二页),其中包含 ButtonColumns。当用户在数据网格的 ButtonColumns 之一中选择一个按钮时,按钮的值从 false 翻转为 true(或从 true 翻转为 false,具体取决于它的起始值)。在 Page_Load 事件中,如果 Page.IsPostBack==true,我将事件处理程序分配给数据网格 (tmdg),如下所示:tmdg.ItemCommand += Tmdg_ItemCommand;

  3. Tmdg_ItemCommand 是调用 Save() 的方法,它翻转数据表并最终翻转数据网格单元格值。

这一切都适用于数据网格中的第一次单击。但是,对于随后单击数据网格,button.DataTextField 值仅在第二次单击网格时翻转。(本质上是“双击”而不是单击)。我的目标是为每个单击事件翻转 ButtonColumn 中单元格的值。

请注意:在第一次单击值翻转成功的网格后,如果我可以单击没有任何反应的单元格 (5,6),如果我单击单元格 (7,2),我将翻转该单元格 (7 ,2). 同样,我可以在没有任何反应的情况下再次单击 (5,2),然后再次选择 (5,2) 进行翻转。(这就是我所说的“双击”的意思)

其他注意事项:

  1. 我已经尝试在多个位置分配整个应用程序的事件处理程序(在页面的 OnInit 中的 Page_Load 之前;或在 UpdatePanel 的 Panel_Init 方法中;或不管 Page_Load 中的 Page.IsPostBack;或在 Page_Load 之后)

  2. 数据网格是一个动态加载的控件,它放置在 Panel 上,而 Panel 又放置在 UpdatePanel 上。

我会尽量不在这里放置一大堆代码,但确实想为您提供一些东西。为了简洁起见,我对它进行了一些编辑。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Push.aspx.cs" Inherits="TMUWF.Push"  MasterPageFile="~/Site.Master" %>

    <asp:Content ID="Content3" ContentPlaceHolderID="MainContent" Runat="Server">

        <asp:DropDownList ID="DropDownList1" 

            OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"

            runat="server" 

            AutoPostBack="True"

            AppendDataBoundItems="true" 

            OnMouseDown="this.size=10;" 

            OnFocusOut="this.size=1;" 

            OnDblClick="this.size=1;"

            >

        </asp:DropDownList>


在我看来,当我在 BindGrid() 的两个“if”语句中设置断点时,第一个“if”经常被跳过,这意味着 Panel1 在那个时刻不包含我的数据网格 tmdg。这个“if”在被忽略的“first-click”中被特别跳过。

如果您需要我提供更多信息,请告诉我!我希望你们中的一个能弄清楚我做错了什么!!任何和所有评论表示赞赏..


潇潇雨雨
浏览 72回答 1
1回答

慕后森

我没有在 Push.aspx.cs 中实例化数据网格 tmdg,而是将其添加到 Push.aspx 中,每次都会触发点击事件。我不确定为什么这在 .aspx 中有效但在 .aspx.cs 文件中无效。下面是新代码来解释......::::Push.aspx::::(此处添加了数据网格)<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Push.aspx.cs" Inherits="TMUWF.Push"&nbsp; MasterPageFile="~/Site.Master" %>&nbsp; &nbsp; <asp:Content ID="Content3" ContentPlaceHolderID="MainContent" Runat="Server">&nbsp; &nbsp; &nbsp; &nbsp; <asp:DropDownList ID="DropDownList1"&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; runat="server"&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AutoPostBack="True"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AppendDataBoundItems="true"&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OnMouseDown="this.size=10;"&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OnFocusOut="this.size=1;"&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OnDblClick="this.size=1;"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; >&nbsp; &nbsp; &nbsp; &nbsp; </asp:DropDownList>&nbsp; &nbsp; &nbsp; &nbsp; <asp:UpdatePanel&nbsp; ID="UpdatePanel1" runat="server" UpdateMode="Conditional" OnInit="Panel_Init">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <contenttemplate>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <h3 id="div-Col-Title">Node</h3>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <asp:Panel runat="server" ID="Panel1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div id="div-Row-Title"><h3 >Channel</h3></div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <asp:DataGrid ID="tmdg" CssClass="gvClass push" AutoGenerateColumns="false" runat="server" >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </asp:DataGrid>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </asp:Panel>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </contenttemplate>&nbsp; &nbsp; &nbsp; &nbsp; </asp:UpdatePanel>&nbsp; &nbsp; </asp:Content>::::Push.aspx.cs:::: (此处删除了数据网格)&nbsp; &nbsp; &nbsp; &nbsp; //DataGrid tmdg = new DataGrid&nbsp; &nbsp; &nbsp; &nbsp; //{&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; AutoGenerateColumns = false,&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; CssClass = "gvClass push"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //};关于为什么的想法表示赞赏。
打开App,查看更多内容
随时随地看视频慕课网APP