如何知道在asp.net的ListView中选择了哪个项目

时间:2014-08-06 09:55:58

标签: c# asp.net listview

我有一个Listview用于显示消息。每条消息都有一条链接到“回复”消息。因为不同的用户可以向一个用户发送消息。用户有不同用户的不同消息。现在我需要跟踪发送消息的每个用户。我想知道是否有办法知道选择了哪个消息,以便可以跟踪发送者的ID。

这是我的列表视图。

  <asp:ListView ID="msg_list" runat="server">
   <ItemTemplate>
    <table>
      <tr class="myitem">
        <td>
             <asp:Label role="menuitem" ID="msg_lbl" runat="server" text='<%#Eval("msg")%>' /><i style=" color:Gray; " >  from   
             <asp:Label ID="tme" runat="server" Text='<%#Eval("name")%>' />
             <i> on </i>
             <asp:Label ID="tmelbl" runat="server" Text='<%#Eval("tme")%>'/>
              <a id="msg-reply" class="btn button" data-toggle="modal" data-target="#msg-rply" style="cursor:pointer;" ><i class="glyphicon glyphicon-share-alt white"> </i></a>  </td>

              <hr style=" margin-top:1px; margin-bottom:1px; " />
      </tr>
     </table>
     <%--<hr style=" margin-top:1px; margin-bottom:1px; " />--%>
   </ItemTemplate>
  </asp:ListView>

使用此列表视图,我会显示消息。在上面的代码中,您可以看到此行<a id="msg-reply" class="btn button" data-toggle="modal" data-target="#msg-rply" style="cursor:pointer;" ><i class="glyphicon glyphicon-share-alt white"> </i></a> </td>

所以,当我点击图标时,会出现一个灯箱(引导模式),我可以写信息。

此灯箱有一个发送消息的按钮(插入数据库),如下所示。

 public void reply_msg(object sender, EventArgs e)
    {
        string tym = DateTime.Now.ToString();
        string sid = Session["userid"].ToString();
        //string rid = ((Label)msg_list.FindControl("easy")).Text;
        //Label mr = (Label)msg_list.FindControl("reg_id_reply");
       // string rid = mr.Text;
        string rid = Session["msgreply"].ToString();

        //msg_list.Items.FindControl("easy");

        sc.connection();
        SqlCommand cmd = new SqlCommand("insert into message(msg,senderId,receiverId,tme) values( @msg,@sid,@rid,@tme) ", sc.con);
        cmd.Parameters.AddWithValue("@msg", ReplyMsgTb.Text);
        cmd.Parameters.AddWithValue("@sid", sid);
        cmd.Parameters.AddWithValue("@rid", rid);
        cmd.Parameters.AddWithValue("@tme", tym);

        cmd.ExecuteNonQuery();

        sc.con.Dispose();
        sc.con.Close();

    }

当我点击带出灯箱发送信息的图标时,我需要知道哪个ListView项目被选中。

或者还有其他任何方法可以知道Listview的哪个项目被选中。

1 个答案:

答案 0 :(得分:0)

您可以对每一行使用复选框。因此,当用户选中特定行的复选框时,您可以轻松回复所选用户。

您的代码将是这样的: -

      <asp:ListView ID="msg_list" runat="server">
      <ItemTemplate>
      <table>
      <tr class="myitem">
      <td>
      <asp:TemplateField HeaderText="Id" ItemStyle-HorizontalAlign="Left">
      <ItemTemplate >
      <asp:CheckBox ID="chkRow" onclick ="CheckSingleCheckbox(this)" AutoPostBack="true"  runat="server"  OnCheckedChanged="chkRow_CheckedChanged"/>

       </ItemTemplate>
       </asp:TemplateField>
      <asp:Label role="menuitem" ID="msg_lbl" runat="server" text='<%#Eval("msg")%>' /><i style=" color:Gray; " >  from   
         <asp:Label ID="tme" runat="server" Text='<%#Eval("name")%>' />
         <i> on </i>
         <asp:Label ID="tmelbl" runat="server" Text='<%#Eval("tme")%>'/>
          <a id="msg-reply" class="btn button" data-toggle="modal" data-target="#msg-rply" style="cursor:pointer;" ><i class="glyphicon glyphicon-share-alt white"> </i></a>  </td>

          <hr style=" margin-top:1px; margin-bottom:1px; " />
  </tr>
 </table>
 <%--<hr style=" margin-top:1px; margin-bottom:1px; " />--%>

  

您可以使用下面给出的脚本来查找已选中的复选框: -

    <script type="text/javascript">
     function CheckSingleCheckbox(ob) {
         var grid = ob.parentNode.parentNode.parentNode;
         var inputs = grid.getElementsByTagName("input");
         for (var i = 0; i < inputs.length; i++) {
             if (inputs[i].type == "checkbox") {
                 if (ob.checked && inputs[i] != ob && inputs[i].checked) {
                     inputs[i].checked = false;
                 }
             }
         }
     }
</script>