Как я могу получить доступ к данным ListviewItem при нажатии кнопки в этом элементе? - PullRequest
0 голосов
/ 24 сентября 2019

Необходимо внести изменения в мою базу данных на основе данных ListViewItem кнопки, на которую нажимают.(т. е. если кто-то нажал кнопку в первом элементе, у источника данных этого элемента есть столбец / значение SessionId, к которому мне нужно получить доступ)

Я попытался получить доступ к элементу с помощью свойства SelectedIndex (действительно ли это предполагается , чтобы вернуть -1?), но неясно, какие шаги предпринять в следующем

Если бы я использовал WPF, я думаю, я мог бы просто получить доступ к DataContext кнопок, но, очевидно, он отличается от asp.net, и я не могу найтиэквивалент.

Listview в .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>

Вот как я заполняю свой lv в .aspx.cs Codebehind:

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, чья кнопка была нажата.(т.е. иметь возможность получить / использовать lvInstructorList.selectedIndex.InstructorName)

1 Ответ

1 голос
/ 24 сентября 2019

Я бы использовал Repeater вместо ListView.Затем вы можете использовать Repeaters OnItemCommand, чтобы поймать щелчок и оценить командный аргумент Buttons для выполнения соответствующих действий.

Я думаю, что стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...