从DoubleClick,Web App而不是Windows窗体的ListBox中获取选定的值

问题描述

我有一个ASP.Net网站,后面带有C#代码。我试图从asp.net列表框中双击获取选定的值。我看到的所有解决方案都是针对Windows窗体的,实际上是否存在Doubleclick事件。 ListBox的System.Web.UI.WebControls版本没有这种运气。

需要双击以触发后面代码中的方法,该方法使我可以读取所选的值。

有很多相关的文章,但不适用于System.Web.UI.WebControls.ListBox

以下是代码示例:

.aspx页面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="XXX-AddressBook.aspx.cs" EnableViewState="true" Inherits="VRV_AddressBook" %>

<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

    <%-- <Meta http-equiv="X-UA-Compatible" content="IE=7,chrome=1"/>--%>
    <Meta http-equiv="x-ua-compatible" content="IE=edge" />
    <Meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
    <Meta http-equiv="Expires" content="0">
    <Meta http-equiv="Cache-Control" content="no-cache">
    <Meta http-equiv="Pragma" content="no-cache">

<style>
</style>

<script type="text/javascript">
</SCRIPT>

    <title> Address Book</title>
</head>
<form id="frmAddressBook" runat="server">
<div>
<asp:ListBox ID="lstbxddNames" runat="server"  Rows="17" SelectionMode="Multiple"></asp:ListBox>
</div>
</form>

</body>
</html>

.aspx.cs页中的建议方法,由于Web Ap版本中没有双击动作,因此无法触发:

private void lstbxddNames_DoubleClick(object sender,System.EventArgs e)
{
    if (lstbxddNames.Items.Count > 0)
    {
        for (int i = 0; i < lstbxddNames.Items.Count; i++)
        {
            if (lstbxddNames.Items[i].Selected)
            {

                string Test = lstbxddNames.Items[i].Value.ToString();
            }

        }
    }
}

这是我加载列表框的方式:

DataTable dt_UserRS = new DataTable();

然后我从SQL查询中加载数据表的内容代码显示

    if (Choice.toupper() == "GLOBAL")
    {
        lstbxddNames.DataSource = dt_UserRS;
        lstbxddNames.DataTextField = "Name";
        lstbxddNames.DataValueField = "Email";
        lstbxddNames.DataBind();
    }

这是我正在使用的解决方案。我实际上在发布之前尝试过此操作,但是我将其放置在PageLoad中的错误位置(我将其错误放置在if(!IsPostBack)部分中)。

  protected void Page_Load(object sender,EventArgs e)
        {

            if (Request["__EVENTARGUMENT"] != null && Request["__EVENTARGUMENT"] == "lstdbclick")
            {
                lstbxddNames_DoubleClick(lstbxddNames.SelectedValue.ToString());

              //  string TEST = lstbxddNames.SelectedValue.ToString();
            }
            lstbxddNames.Attributes.Add("ondblclick",ClientScript.GetPostBackEventReference(lstbxddNames,"lstdbclick"));

            if (!IsPostBack)
            {
                ViewState["ViewStateId"] = System.Guid.NewGuid().ToString(); //PART OF PAGE REFRESH DETECTION
                Session["SessionId"] = ViewState["ViewStateId"].ToString();

确保也可以使用该方法

private void lstbxddNames_DoubleClick(string Value)
{
    if (!String.IsNullOrEmpty(Value))
    {

        string Test = Value;
    }

}

有人可以解释这里发生了什么吗? 我不明白的一件事是为什么要添加属性?如果我可以通过事件参数检测到双击,为什么要添加属性

在此先感谢您的帮助,

埃里克

解决方法

在列表框循环中,您可以将双击事件关联到每个项目。例如

 item.Attributes.Add("ondblclick","functionCall();");
,

检查下面的链接,这对我来说很完美。

我已经检查了整个代码,并实现了我的项目。

希望这对您有所帮助。

https://html.developreference.com/article/24269128/How+to+add+Double+Click+mouse+event+to+listbox%3F