C# 在listview中选择行时如何更改索引

C# 在listview中选择行时如何更改索引,c#,asp.net,listview,C#,Asp.net,Listview,我是Asp.net的初学者。我有这个listview控件,它由MSSQL数据库填充。现在我想在选择listview行时更改listview索引。 下面是listview的编码 <asp:ListView ID="ListViewTask" runat="server" OnSelectedIndexChanged="ListViewTask_SelectedIndexChanged" OnSelectedIndexChanging

我是Asp.net的初学者。我有这个listview控件,它由MSSQL数据库填充。现在我想在选择listview行时更改listview索引。 下面是listview的编码

<asp:ListView ID="ListViewTask" runat="server" OnSelectedIndexChanged="ListViewTask_SelectedIndexChanged" OnSelectedIndexChanging="ListViewTask_SelectedIndexChanging">
   <ItemTemplate>
      <div class="row">
         <div class="col-md-1">
            <asp:CheckBox ID="ChkTaskDone" runat="server" Checked='<%#Eval("is_task_done")%>' CommandName="Select" OnCheckedChanged="ChkTaskDone_OnCheckedChanged" AutoPostBack="True" />
         </div>
         <div class="col-md-7">
            <asp:Label ID="llbTaskId" runat="server" Text='<%#Eval("task_id")%>' Visible="false"></asp:Label>
            <asp:LinkButton ID="lnkbtnTaskName" Style="width: auto" runat="server" Text='<%#Eval("task_name")%>' CommandName="Select"></asp:LinkButton>
         </div>
         <div class="col-md-2">
            <asp:Label class="badge badge-pill badge-dark float-right" ID="llbProjectName" runat="server" Text='<%#Eval("project_name")%>'></asp:Label>
         </div>
         <div class="col-md-2">
            <asp:LinkButton Class="float-right" ID="lnkbtnDueDate" runat="server" Text='<%#Eval("due_date","{0:d MMM}")%>' align="left"></asp:LinkButton>
         </div>
      </div>
      <hr />
   </ItemTemplate>
</asp:ListView>

在我的例子中,我检索行的selectedIndex,然后获取TaskId标签的值,该值在html中为'visible=false',然后从该任务Id执行一些Sql操作。

Ok,因此如果您在该行上有一个链接按钮,甚至是一个复选框,那么如前所述,我“假设”您没有问题

但是我们需要在行上的任意位置进行简单的单击以进行选择(基于该行单击执行某些操作)

简单的方法是向行中添加一个click事件,并使用一些JavaScript实现这一点。 (不幸的是,您没有asp.net行单击事件-您就是没有)。因此,你要么点击复选框,要么点击链接按钮——但没有按钮就没有行点击

但是,标记是非常简单的代码,这种方法意味着/允许您单击行上的任意位置

因此,在您的表行上,您可以执行以下操作:

<tr ondblclick="MyRowClick('<%# Container.DisplayIndex %>')" >
我在C#方面仍然有点弱,但上面的内容会变得

{
long ix = Request("__EVENTARGUMENT");
ListViewDataItem MyListViewData = ListView1.Items(ix);
Label MyLable = MyListViewData.FindControl("QuoteNumLabel");
Debug.Print("Value of row QuoteNumber = " + MyLable.Text);
}
那么,整行点击?行单击没有内置的“事件”。row index事件将为您的linkbutton触发,但如果要在任意位置“单击”以选择行,请获取索引,然后执行任何操作?它要么是一个按钮,要么像上面所说的那样使用一点点JavaScript

上述方法效果很好。只需要添加2-3行JavaScript

但是,我建议当您将列表视图放到表单上时,使用向导构建网格(为列表视图选择数据源)。然后,您可以删除放置在表单中的数据源(如果您使用代码构建datatable/dataset)。
然后开始编辑和播放布局。如前所述,您至少需要表示一个表的内容,然后至少需要一个“tr”。

我不认为我可以将我的整个问题都放在评论中,所以请尽我所能在回答中解释我的问题。我只是犯了一个愚蠢的错误,将“u EVENTARGUMENT”==RowJump。在页面上的IF条件中加载事件条件,说明我的代码不工作的原因。无论如何,谢谢你的帮助:)
<tr>

 all your stuff here
</tr>
<tr ondblclick="MyRowClick('<%# Container.DisplayIndex %>')" class="myRowHov" >

   <td>
        <asp:CheckBox ID="ChkTaskDone" runat="server" etc.
   </td>

   <td>
       <asp:Label ID="llbTaskId" runat="server" 
             Text='<%#Eval("task_id")%>' Visible="false"></asp:Label>
   </td>
</tr>  <--- end of table row
<script>
  function MyRowClick(qID) {

        // passed value is row clicked on index - starts at 0
        __doPostBack('RowJump', qID);
    }
</script>
If Request("__EVENTTARGET") = "RowJump" Then

    Dim ix As Long = Request("__EVENTARGUMENT")
    Dim MyListViewData As ListViewDataItem = ListView1.Items(ix)
    Dim MyLable As Label = MyListViewData.FindControl("QuoteNumLabel")
    Debug.Print("Value of row QuoteNumber = " & MyLable.Text)

End If
{
long ix = Request("__EVENTARGUMENT");
ListViewDataItem MyListViewData = ListView1.Items(ix);
Label MyLable = MyListViewData.FindControl("QuoteNumLabel");
Debug.Print("Value of row QuoteNumber = " + MyLable.Text);
}