Java脚本弹出框时,多用户选择同一行在Gridview

本文关键字:一行 Gridview 选择 脚本 多用户 Java | 更新日期: 2023-09-27 18:06:21

我有一个gridview与许多行在第一行上的SELECT链接。gridview同时被许多用户使用。当两个用户同时点击同一行时,一个弹出框将显示给其中一个店员,说另一个用户选择了一个项目。

我有下面的javascript代码,但弹出框没有显示。

 protected void gvTypes_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (condition)
     {                   
           StringBuilder sb = new StringBuilder();
           sb.Append("<script type = 'text/javascript'>");
           sb.Append("window.onload=function(){");
           sb.Append("alert('");
           sb.Append("The following item has been chosen by another user. Please choose another one. ''n''n" + row.Cells[3].Text + "''n");
           sb.Append("')};");
           sb.Append("</script>");
           ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", sb.ToString());
      }
  }

显示数据表格

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                <ContentTemplate>                      
                    <asp:GridView ID="gvTypes" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None"
                        Width="688px" AllowPaging="True" AutoGenerateColumns="false" OnSelectedIndexChanged="gvTypes_SelectedIndexChanged"
                        Font-Size="14px" PageSize="11" DataKeyNames="TicketId, TicketNumber, LinkedTicketId"
                        OnRowCommand="gvMain_RowCommand" OnPageIndexChanging="gvMain_PageIndexChanging">
                        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                        <Columns>
                            <asp:CommandField ShowSelectButton="True"/>
                            <asp:BoundField DataField="TicketId" HeaderText="Ticket Id" SortExpression="TicketId"
                                Visible="false">
                                <ItemStyle HorizontalAlign="Center" />
                            </asp:BoundField>
                            <asp:BoundField DataField="TicketNumber" HeaderText="Ticket #Id" SortExpression="TicketNumber"
                                Visible="false">
                                <ItemStyle HorizontalAlign="Center" />
                            </asp:BoundField>
                        </Columns>
                        <EditRowStyle BackColor="#999999" />
                    </asp:GridView>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="TimerGVMain" />
                </Triggers>
            </asp:UpdatePanel>
            <asp:Timer ID="Timer1" Interval="5200" runat="server" OnTick="TimerGVMain_Tick">
            </asp:Timer>

Java脚本弹出框时,多用户选择同一行在Gridview

我不太确定你的代码的其余部分,但基于什么是问题,如果你注册脚本到ScriptManager,它应该工作:

protected void gvTypes_SelectedIndexChanged(object sender, EventArgs e)
{
    if (condition)
    {                   
        StringBuilder sb = new StringBuilder();
        // Using function pageLoad() to execute the script 
        // whenever the page is fully or partially loaded (AJAX).
        sb.Append("function pageLoad() {");
        sb.Append("alert('");
        sb.Append("The following item has been chosen by another user. Please choose another one. ''n''n" + row.Cells[3].Text + "''n");
        sb.Append("')}");
        // UpdatePanel1 needs to be replaced with your UpdatePanel ID.
        ScriptManager.RegisterClientScriptBlock(UpdatePanel1, typeof(UpdatePanel), "alert", sb.ToString(), true);
    }
}

MSDN ScriptManager。RegisterClientScriptBlock

编辑

你可以稍微改变你的标记,通过移动TimerUpdatePanel:

<ContentTemplate>
    <asp:Timer ID="Timer1" Interval="5200" runat="server" OnTick="TimerGVMain_Tick"></asp:Timer>
</ContentTemplate>

和去除Triggers:

<!--<Triggers>
    <asp:AsyncPostBackTrigger ControlID="TimerGVMain" />
</Triggers>-->

编辑2

或者,您可以将Timer保留在原处,并通过为Timer添加EventName来更改Triggers:

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="TimerGVMain" EventName="Tick" />
</Triggers>