C# 单击ListviewItem中的按钮时,如何访问该项的数据?

C# 单击ListviewItem中的按钮时,如何访问该项的数据?,c#,asp.net,listview,aspx-user-control,C#,Asp.net,Listview,Aspx User Control,需要根据单击的按钮的ListViewItem的数据在my db中进行更改。(即,如果有人单击第一个项目中的按钮,则该项目的数据源具有我需要访问的SessionId列/值) 我曾尝试使用SelectedIndex属性访问该项(是否应该返回-1?),但不确定下一步要采取的步骤 如果我使用WPF,我相信我可以访问按钮DataContext,但在asp.net中它显然不同&我找不到等效的 .aspx中的Listview: <asp:ListView ID="lvIn

需要根据单击的按钮的ListViewItem的数据在my db中进行更改。(即,如果有人单击第一个项目中的按钮,则该项目的数据源具有我需要访问的SessionId列/值)

我曾尝试使用SelectedIndex属性访问该项(是否应该返回-1?),但不确定下一步要采取的步骤

如果我使用WPF,我相信我可以访问按钮DataContext,但在asp.net中它显然不同&我找不到等效的

.aspx中的Listview:

<asp:ListView
                ID="lvInstructors"
                runat="server"
                itemwDataBound="lvDataBound"
                itemCommand="lvCommand"
                Visible="true">
                <LayoutTemplate>
                    <div class="container" id="mainContent">
                        <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
                    </div>
                </LayoutTemplate>

                <ItemTemplate>
                    <div class="row instructorItem" id="instructorItem">
                        <div class="col-2 sessionStartTimeDiv">
                            <p class="sessionStartTime"><%#Eval("SessionStartTime")%></p>
                        </div>

                        <div class="col-2 instructorHeadshotDiv">
                            <asp:Image class="instructorHeadshot" runat="server" src='<%#Eval("InstructorHeadshot")%>' />
                        </div>

                        <div class="col-5 sessionInfoDiv">
                            <h3 class="instructorName"><%#Eval("InstructorName")%></h3>
                            <p class="sessionInfo"><%#Eval("SessionInfo")%></p>
                        </div>

                        <div class="col-3 checkInBtnDiv">

                            <asp:Button class="checkInBtn" ID="checkInBtn" runat="server" OnClick="CheckInBtn_Click" Text="Check-In"></asp:Button>
                        </div>
                    </div>
                    <hr />
                </ItemTemplate>

                <EmptyDataTemplate>
                    <br />
                    <br />
                    No Sessions to Display.
                </EmptyDataTemplate>
            </asp:ListView>

我希望能够访问其按钮被单击的ListViewItem的数据。(即能够获取/使用lvInstructorList.selectedIndex.InstructorName)

我将使用中继器而不是列表视图。然后,您可以使用Repeaters OnItemCommand捕捉单击并计算Buttons命令参数以采取适当的操作


我认为这可能值得一试。

ListView也有一个ItemCommand-这是一个很好的例子来学习Justin,注意实际数据在绑定后是如何不存在的-您需要设置ListView的DataKey属性,并使用类似示例中的代码来检索所选的特定项。谢谢你们两位,非常地我现在要调查一下。如果我改用转发器,会有什么好处吗?@Justin我更喜欢转发器,因为我觉得自己更能控制html输出。在aspx页面中可能需要更多的编码,但我更喜欢这样。啊,我明白了。再次感谢你们两位。我用这个实现了我想要的:````(在.aspx中添加了一个HiddenField控件)(然后在codeBehind中访问单击字段的值)受保护的void CheckInBtn\u Click(object sender,EventArgs e){Button CheckInBtn=(Button)sender;var row=(ListViewItem)checkInBtn.NamingContainer;;int clickedSessionID=Convert.ToInt32(((HiddenField)row.FindControl(“sessionID”)).Value)```
private void UpdateInstructorListView()
    {
        //Make Data table to hold ListViewItem Data 
        dt = new DataTable();
        dt.Columns.Add("SessionId");
        dt.Columns.Add("SessionStartTime");
        dt.Columns.Add("InstructorHeadshot");
        dt.Columns.Add("InstructorName");
        dt.Columns.Add("SessionInfo");
        DataRow dr;

        foreach (Session S in UpcomingSessions)
        {
            foreach (Enrollment I in S.Instructors())
            {
                //
                SessionId = S.SessionId;
                SessionStartTime = S.FirstDateTime().ToShortTimeString();
                // TODO: JUSTIN FIGURE OUT HOW/WHERE TO PULL HEADSHOT FROM THEN BEST WAY TO ADD IT TO src ATTRIBUTE
                InstructorHeadshot = "headshots/Justin.jpg";
                InstructorName = I.FirstName + " " + I.LastName;
                SessionInfo = S.Name + " , " + S.Room.ToString();

                //Fill rows in DataTable with variables
                dr = dt.NewRow();
                dr["SessionId"] = SessionId;
                dr["SessionStartTime"] = SessionStartTime;
                dr["InstructorHeadshot"] = InstructorHeadshot;
                dr["InstructorName"] = InstructorName;
                dr["SessionInfo"] = SessionInfo;
                dt.Rows.Add(dr);
            }
        }

        //Bind datatable to lv
        lvInstructors.DataSource = dt;
        lvInstructors.DataBind();
    }