2013-04-12 2 views
2

Я настраиваю HealthMonitoring, и я пишу пару страниц для управления журналами событий.Как найти, какая страница в DetailsView содержит выбранные строки GridView

У меня есть одна страница с GridView и другая, у которой есть DetailsView. GridView имеет кнопку шаблона в каждой строке с событием onClick, которое загружает вторую страницу с помощью DetailsView.

Что я хотел бы сделать: когда я нажимаю кнопку шаблона на GridView, он загружает вторую страницу с помощью DetailsView и вставляет эту конкретную запись из GridView в таблицу DetailsView.

У DetailsView должен быть включен пейджинг. Я застрял, пытаясь выяснить, какой индекс страницы загружается с нужной записью из GridView. В настоящее время он просто загружает индекс первой страницы, затем мне нужно щелкнуть рядом с нужной мне записью.

Без включения пейджинга я могу прочитать две мои глобальные переменные, а затем загрузить правильную запись в таблицу DetailsView, но с включенным пейджингом я не уверен, как это сделать.

На GridView страницы:

protected void Details1_ButtonClick(object sender, EventArgs e) 
{ 
    //I set 2 global variables here of the selected EventId and 
    //Details to read when the next page loads 
    Response.Redirect("ErrorDetails.aspx"); 
} 

На DetailsView страницы.

protected void Page_Load(object sender, EventArgs e) 
{ 
    //without paging I can set the SqlDataSource1.SelectCommand to select 
    //the correct record using one of the global variables 
} 

Я пытался использовать DetailsView1_PageIndexChanged, DetailsView1_Load и Page_Load, чтобы получить значение в первой строке, но по какой-то причине он всегда находится страница позади. При загрузке переменной всегда отображается идентификатор предыдущей страницы. Я собирался попытаться отслеживать страницу для удаления записей, но это тоже не сработает.

Это DataSource и DetailsView в ErrorDetails.aspx:

<asp:SqlDataSource 
    ID="SqlDataSource1" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
    ProviderName="<%$ ConnectionStrings:DefaultConnection.ProviderName %>"> 
    <DeleteParameters> 
     <asp:Parameter Name="EventId" /> 
    </DeleteParameters> 
</asp:SqlDataSource> 

<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px" DataSourceID="SqlDataSource1" DataKeyNames="EventId" AutoGenerateRows="False" OnItemDeleted="DetailsView1_ItemDeleted" OnItemDeleting="DetailsView1_ItemDeleting" AllowPaging="True" OnLoad="DetailsView1_Load" OnPageIndexChanged="DetailsView1_PageIndexChanged" OnPageIndexChanging="DetailsView1_PageIndexChanging"> 
    <AlternatingRowStyle CssClass="alt" /> 
    <Fields> 

     <asp:CommandField ShowDeleteButton="True" /> 

     <asp:BoundField DataField="EventId" HeaderText="EventId" /> 
     <asp:BoundField DataField="EventTimeUtc" HeaderText="EventTimeUtc" /> 
     <asp:BoundField DataField="EventTime" HeaderText="EventTime" /> 
     <asp:BoundField DataField="EventType" HeaderText="EventType" /> 
     <asp:BoundField DataField="EventSequence" HeaderText="EventSequence" /> 
     <asp:BoundField DataField="EventOccurrence" HeaderText="EventOccurrence" /> 
     <asp:BoundField DataField="EventCode" HeaderText="EventCode" /> 
     <asp:BoundField DataField="EventDetailCode" HeaderText="EventDetailCode" /> 
     <asp:BoundField DataField="Message" HeaderText="Message" /> 
     <asp:BoundField DataField="ApplicationPath" HeaderText="ApplicationPath" /> 
     <asp:BoundField DataField="ApplicationVirtualPath" HeaderText="ApplicationVirtualPath" /> 
     <asp:BoundField DataField="MachineName" HeaderText="MachineName" /> 
     <asp:BoundField DataField="RequestUrl" HeaderText="RequestUrl" /> 
     <asp:BoundField DataField="ExceptionType" HeaderText="ExceptionType" /> 

     <asp:TemplateField HeaderText="Details"> 
      <ItemTemplate> 
       <asp:Label ID="Label1" runat="server"> 
        <%= EventVariables.EventDetails %> 
       </asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:CommandField ShowDeleteButton="True" /> 

    </Fields> 
    <PagerSettings Mode="NextPreviousFirstLast" /> 
    <PagerStyle CssClass="pager" /> 
</asp:DetailsView> 

Это DataSource и GirdView из родительской формы:

<asp:GridView 
     ID="ErrorGrid" 
     runat="server" 
     AutoGenerateColumns="False" 
     DataSourceID="SqlDataSource1" 
     DataKeyNames="EventId" 
     OnRowDeleting="ErrorGrid_RowDeleting" 
     AllowPaging="True" 
     AllowSorting="True" 
     Font-Size="Small" 
     CellPadding="10" 
     CellSpacing="1" > 
     <Columns> 
      <asp:TemplateField ShowHeader="False"> 
       <ItemTemplate> 
        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete" OnClientClick="return confirm('Are you sure you want to delete this record?');" Text="Delete"></asp:LinkButton> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField ShowHeader="False"> 
       <ItemTemplate> 
        <asp:LinkButton ID="Details1" Text="Details" runat="server" AutoPostBack="true" OnClick="Details1_ButtonClick" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField DataField="EventId" HeaderText="EventId" SortExpression="EventId" /> 
      <asp:BoundField DataField="EventTime" HeaderText="EventTime" SortExpression="EventTime" /> 
      <asp:BoundField DataField="RequestUrl" HeaderText="RequestUrl" SortExpression="RequestUrl" /> 
      <asp:BoundField DataField="ExceptionType" HeaderText="ExceptionType" SortExpression="ExceptionType" /> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource 
     ID="SqlDataSource1" 
     runat="server" 
     ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
     SelectCommand="SELECT * FROM [aspnet_WebEvent_Events]" 
     DeleteCommand="DELETE FROM [aspnet_WebEvent_Events] WHERE [EventId][email protected]"> 
     <DeleteParameters> 
      <asp:Parameter Name="EventId" /> 
     </DeleteParameters> 
    </asp:SqlDataSource> 
+0

Когда вы говорите о пейджинге для DetailView, это будет соответствовать номеру строки в GridView, правильно? Или я не понимаю? – Melanie

+0

@Melanie В GridView включен параметр пейджинга. Теперь GridView имеет 7 страниц с 72 событиями и 72 страницами в DetailView. Поэтому я не могу придумать способ сопоставления страницы в DetailView со страницей/строкой в ​​GridView. –

ответ

0

мне удалось решить эту проблему, делая расчет. Поскольку существует 10 строк на странице в GridView я могу вычислить эту страницу, как это сделать:

EventVariables.EventPage = ((((ErrorGrid.PageIndex + 1) * 10) - 10) + Row.RowIndex); 

, а затем загрузить страницу в DetailsView из переменной при загрузке.

Смежные вопросы