单击项目中的按钮时如何访问 ListviewItem 的数据?
How can I access the data of a ListviewItem when a button in that Item is clicked?
需要根据单击按钮的 ListViewItem 的数据在我的数据库中进行更改。 (即,如果有人单击第一个项目中的按钮,则该项目的数据源具有我需要访问的 SessionId column/value)
我已经尝试使用 SelectedIndex 属性 访问项目(它是 supposed 到 return -1 吗?),但不确定要采取的步骤下一个
如果我使用的是 WPF,我相信我可以访问 Buttons DataContext,但显然它在 asp.net 中有所不同,我找不到等效项。
.aspx 中的列表视图:
<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>
这就是我在 .aspx.cs 代码隐藏中填充 lv 的方式:
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();
}
我希望能够访问其按钮被单击的 ListViewItem 的数据。 (即能够 get/use lvInstructorList.selectedIndex.InstructorName )
我会使用 Repeater 而不是 ListView。然后,您可以使用 Repeaters OnItemCommand 捕捉点击并评估 Buttons CommandArgument 以采取适当的操作。
我认为这可能值得一试。
需要根据单击按钮的 ListViewItem 的数据在我的数据库中进行更改。 (即,如果有人单击第一个项目中的按钮,则该项目的数据源具有我需要访问的 SessionId column/value)
我已经尝试使用 SelectedIndex 属性 访问项目(它是 supposed 到 return -1 吗?),但不确定要采取的步骤下一个
如果我使用的是 WPF,我相信我可以访问 Buttons DataContext,但显然它在 asp.net 中有所不同,我找不到等效项。
.aspx 中的列表视图:
<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>
这就是我在 .aspx.cs 代码隐藏中填充 lv 的方式:
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();
}
我希望能够访问其按钮被单击的 ListViewItem 的数据。 (即能够 get/use lvInstructorList.selectedIndex.InstructorName )
我会使用 Repeater 而不是 ListView。然后,您可以使用 Repeaters OnItemCommand 捕捉点击并评估 Buttons CommandArgument 以采取适当的操作。
我认为这可能值得一试。