Как получить доступ к элементу управления из подробного просмотра программно? - PullRequest
0 голосов
/ 02 марта 2011

Мне нужно иметь возможность изменять элементы управления из моего подробного обзора программно на привязке данных. Сейчас я использую этот код, но получаю сообщение об ошибке «Индекс был вне диапазона».

Private Sub dtlApplication_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles dtlApplication.DataBound
    Dim resumeLink As HyperLink = dtlApplication.Rows.Item(0).FindControl("lnkResume")
    resumeLink.NavigateUrl = "Resumes/"
End Sub

Я также пытался это сделать, но получил ошибку «Ссылка на объект не установлена ​​на экземпляр объекта».

Private Sub dtlApplication_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles dtlApplication.DataBound
    Dim resumeLink As HyperLink = dtlApplication.FindControl("lnkResume")
    resumeLink.NavigateUrl = "Resumes/"
End Sub

Я думаю, что проблема может заключаться в том, что представление сведений не имеет никаких элементов управления при первоначальной загрузке страницы, поскольку не получает их до тех пор, пока я не выберу строку в своем основном представлении сетки. По сути, я пытаюсь выполнить этот код, когда я выбираю строку в сетке, а не при начальной загрузке страницы. Может ли это быть? Если да, то где мне выполнять этот код, если нет в привязке к данным подробного просмотра?

Вот подробный вид и соответствующая разметка источника данных:

<asp:DetailsView ID="dtlApplication" runat="server" AutoGenerateRows="false"
                        DataKeyNames="appID" DataSourceID="ds2" CellPadding="0" BorderColor="Transparent" 
                        BorderWidth="0px" GridLines="None" HorizontalAlign="Left" Width="459" CssClass="dtlView">
                        <Fields>                                
                            <asp:TemplateField showheader="false">
                                <ItemTemplate>  

                                    <h3>Resume</h3>

                                    <asp:HyperLink runat="server" ID="lnkResume" Text="View Resume &raquo;"></asp:HyperLink>                                        

                                </ItemTemplate>
                            </asp:TemplateField>                                
                        </Fields>
                        <PagerSettings Mode="NextPreviousFirstLast" PageButtonCount="5" FirstPageText="&larr; First" LastPageText="Last &rarr;"
                            nextpagetext="Next &raquo;" previouspagetext="&laquo; Previous" />
                        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" CssClass="paging" />
                    </asp:DetailsView>
<asp:SqlDataSource ID="ds2" runat="server" ConnectionString="<%$ ConnectionStrings:cn %>" 
                         SelectCommandType="StoredProcedure" SelectCommand="sp_SelectApplicationDetail" 
                         EnableCaching="true" CacheDuration="600">  
                         <SelectParameters>
                            <asp:ControlParameter Name="appID" ControlID="gvAdmin" PropertyName="SelectedValue"></asp:ControlParameter>
                         </SelectParameters>         
                    </asp:SqlDataSource>

Ответы [ 3 ]

1 голос
/ 04 марта 2011

Источник данных подробного просмотра использует значение selectedview в качестве параметра управления выборкой, и при загрузке страницы в просмотре grid еще не используется selectedindex, поэтому подробное представление пустое. Я должен был установить выбранный индекс gridview при загрузке страницы, чтобы решить проблему.

0 голосов
/ 30 мая 2012

Вы также можете установить свойство visibleview details в false На странице Событие загрузки

0 голосов
/ 02 марта 2011

Кажется, что событие DataBound не является лучшим событием для такой проблемы.Попробуйте вместо этого использовать ItemCreated event обработчик событий.Как здесь, например:

Private Sub dtlApplication_ItemCreated(sender As Object, e As EventArgs) Handles dtlApplication.ItemCreated

    Dim someRow As  DetailsViewRow = dtlApplication.Rows(0);
    If someRow Is Nothing Then Exit Sub       
    Dim link As HyperLink = DirectCast(someRow.FindControl("lnkResume"), HyperLink)

    If link Is Nothing Then Exit Sub

    link.NavigateUrl = "Resumes/"
End
...