GridViews в ASP.net; C # - PullRequest
       4

GridViews в ASP.net; C #

0 голосов
/ 25 марта 2010

Я создаю gridviews, используя C # и ASP.net ... Мне нужна помощь в создании 2 gridviews, которые имеют одинаковый processID и получают данные из разных таблиц SQL в одной базе данных. Когда я нажимаю на одну первую строку первое представление сетки должно дать мне список файлов с тем же идентификатором процесса и его подробности во втором просмотре сетки

В одном идентификаторе процесса хранится много разных XML-файлов. например, processID = 7A413EA4-8ECE-472D-92BE-F58C22E5C567 в первом виде сетки поэтому все xml-файлы с именем пользователя, датой, датой входа в систему с одинаковым идентификатором процесса во второй таблице должны отображаться при выборе строки в первой таблице

Это то, что я до сих пор делал:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="FS_PS2FS._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>PS2FS Client</title>
</head>
<body bgcolor="lightgrey">
    <form id="form1" runat="server">
    <div>
        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;
        <asp:Label ID="heading" runat="server" Font-Bold="True" Font-Names="Times New Roman"
            Font-Size="XX-Large" Font-Underline="True" ForeColor="MidnightBlue" Text="PS2FS CLIENT" CssClass="normal" Height="41px" Width="227px" BorderStyle="Outset" BorderWidth="5px"></asp:Label><br />
        <br />
        <br />
        <asp:GridView ID="LOG_GridView" runat="server" AllowPaging="True" AutoGenerateColumns="False"
            CellPadding="4" DataSourceID="FS_PS2FS" ForeColor="#333333" Height="300px" Width="943px" HorizontalAlign="Center" CssClass="AlternatingRowStyle" PageSize="6" SelectedIndex="0" OnSelectedIndexChanging="LOG_GridView_SelectedIndexChanging" BorderColor="#999999">
            <FooterStyle BackColor="#CCCCCC" Font-Bold="True" ForeColor="Black" CssClass="normal" />
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" HorizontalAlign="Center" VerticalAlign="Middle" CssClass="RowStyle" />
            <EditRowStyle HorizontalAlign="Left" VerticalAlign="Middle" CssClass="normal" Font-Names="Cambria" BackColor="#999999" />
            <SelectedRowStyle BackColor="#FFFFC0" Font-Bold="True" ForeColor="#333333" BorderStyle="Outset" CssClass="SelectedRowStyle" BorderColor="Yellow" />
            <PagerStyle HorizontalAlign="Center" ForeColor="Black" BackColor="#999999" VerticalAlign="Middle" />
            <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" CssClass="HeaderStyle" />
            <AlternatingRowStyle BackColor="White" HorizontalAlign="Center" ForeColor="#284775" />
            <Columns>
                <asp:CommandField HeaderText="Select" ShowSelectButton="True" />
                <asp:BoundField DataField="LOG_ProcessId" HeaderText="Process ID" SortExpression="LOG_ProcessId" />
                <asp:BoundField DataField="LOG_Id" HeaderText="ID" InsertVisible="False" ReadOnly="True"
                    SortExpression="LOG_Id" />
                <asp:BoundField DataField="LOG_FileName" HeaderText="File Name" SortExpression="LOG_FileName" />
                <asp:BoundField DataField="LOG_Date" HeaderText="Date" SortExpression="LOG_Date" />
                <asp:BoundField DataField="LOG_Description" HeaderText="Description" SortExpression="LOG_Description" />
                <asp:BoundField DataField="LOG_UserId" HeaderText="User ID" SortExpression="LOG_UserId" />
            </Columns>
        </asp:GridView>
        &nbsp;
        <asp:SqlDataSource ID="FS_PS2FS" runat="server" ConnectionString="<%$ ConnectionStrings:FreightsmartWebConnection %>"
            SelectCommand="SELECT [LOG_Id], [LOG_FileName], [LOG_Description], [LOG_Date], [LOG_ProcessId], [LOG_Details], [LOG_UserId] FROM [FS_LOG_PS2FS] ORDER BY [LOG_Date] DESC">
        </asp:SqlDataSource>
        <br />


</div>
    <asp:SqlDataSource ID="PS2FS_FS" runat="server" ConnectionString="<%$ ConnectionStrings:FreightsmartWebConnection %>"
        SelectCommand="SELECT [P2FV_ID], [P2FV_MessageType], [P2FV_MessageText], [P2FV_FileName], [P2FV_ProcessId], [P2FV_CreateDate], [P2FV_CreateUser] FROM [FS_LOG_PS2FS_Validation] ORDER BY [P2FV_CreateDate] DESC">
    </asp:SqlDataSource>

    &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
    <asp:GridView ID="LogValidation_GridView" runat="server" AutoGenerateColumns="False" CellPadding="4"
        DataSourceID="PS2FS_FS" ForeColor="#333333" Height="300px" Width="940px" AllowPaging="True" HorizontalAlign="Center" PageSize="6" OnRowUpdated="LogValidation_GridView_RowUpdated" BorderColor="#999999">
        <FooterStyle BackColor="#CCCCCC" Font-Bold="True" ForeColor="Black" CssClass="normal" />
        <Columns>
            <asp:BoundField DataField="P2FV_ProcessId" HeaderText="Process ID" SortExpression="P2FV_ProcessId" Visible="False" />
            <asp:BoundField DataField="P2FV_ID" HeaderText="ID" InsertVisible="False" ReadOnly="True"
                SortExpression="P2FV_ID" />
            <asp:BoundField DataField="P2FV_MessageType" HeaderText="Message Type" SortExpression="P2FV_MessageType" />
            <asp:BoundField DataField="P2FV_MessageText" HeaderText="Message Text" SortExpression="P2FV_MessageText" />
            <asp:BoundField DataField="P2FV_FileName" HeaderText="File Name" SortExpression="P2FV_FileName" />
            <asp:BoundField DataField="P2FV_CreateDate" HeaderText="Create Date" SortExpression="P2FV_CreateDate" />
            <asp:BoundField DataField="P2FV_CreateUser" HeaderText="Create User" SortExpression="P2FV_CreateUser" />
        </Columns>
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" BorderStyle="Outset" CssClass="normal" Wrap="True" />
        <PagerStyle HorizontalAlign="Center" ForeColor="Black" BackColor="#999999" />
        <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        <EditRowStyle BackColor="#999999" />
    </asp:GridView>

</form>

Ответы [ 3 ]

0 голосов
/ 25 марта 2010

По сути, вы хотите создать экран Master / Detail ... это домашняя работа? В любом случае вы хотите добавить событие (выбранный индекс изменен) в первую сетку. Затем добавьте туда код, который будет либо устанавливать источник данных, либо «фильтровать» данные во второй сетке, вы также можете выбрать, чтобы вторая сетка была видимой в этой точке, если это еще не сделано.

Источник данных второй сетки нуждается в предложении WHERE, которое сравнивает идентификатор процесса в вашем источнике данных с идентификатором, выбранным в первой таблице. Вы можете установить ключ данных первой сетки в это поле (processID) для удобного поиска.

Удачи!

0 голосов
/ 25 марта 2010

Вы должны быть в состоянии сделать все это из разметки. Вот рабочий пример использования базы данных Northwind

Определите главный GridView:

<asp:GridView ID="master" runat="server" DataSourceID="sdsMaster" 
        AutoGenerateColumns="False" DataKeyNames="OrderID" AllowPaging="True" >
    <Columns>
        <asp:CommandField ShowSelectButton="True" />
        <asp:BoundField DataField="OrderID" HeaderText="OrderID" InsertVisible="False" 
            ReadOnly="True" SortExpression="OrderID" />
        <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" 
            SortExpression="CustomerID" />
        <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" 
            SortExpression="EmployeeID" />
        <asp:BoundField DataField="OrderDate" HeaderText="OrderDate" 
            SortExpression="OrderDate" />
        <asp:BoundField DataField="RequiredDate" HeaderText="RequiredDate" 
            SortExpression="RequiredDate" />
        <asp:BoundField DataField="ShippedDate" HeaderText="ShippedDate" 
            SortExpression="ShippedDate" />
        <asp:BoundField DataField="ShipVia" HeaderText="ShipVia" 
            SortExpression="ShipVia" />
        <asp:BoundField DataField="Freight" HeaderText="Freight" 
            SortExpression="Freight" />
    </Columns>
    </asp:GridView>

Определить детали GridView:

<asp:GridView ID="detail" runat="server" DataSourceID="sdsDetail" 
        AutoGenerateColumns="False" DataKeyNames="OrderID,ProductID" >
    <Columns>
        <asp:BoundField DataField="OrderID" HeaderText="OrderID" ReadOnly="True" 
            SortExpression="OrderID" />
        <asp:BoundField DataField="ProductID" HeaderText="ProductID" ReadOnly="True" 
            SortExpression="ProductID" />
        <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" 
            SortExpression="UnitPrice" />
        <asp:BoundField DataField="Quantity" HeaderText="Quantity" 
            SortExpression="Quantity" />
        <asp:BoundField DataField="Discount" HeaderText="Discount" 
            SortExpression="Discount" />
    </Columns>
    </asp:GridView>

Вот SqlDataSource для главной таблицы. Просто основные вещи для выбора и отображения записей:

<asp:SqlDataSource ID="sdsMaster" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
        SelectCommand="SELECT [OrderID], [CustomerID], [EmployeeID], [OrderDate], [RequiredDate], [ShippedDate], [ShipVia], [Freight] FROM [Orders]" />

Теперь в подробностях SqlDataSource используйте предложение SQL где, привязанное к выбранному первичному ключу в главном GridView:

<asp:SqlDataSource ID="sdsDetail" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
        SelectCommand="SELECT [OrderID], [ProductID], [UnitPrice], [Quantity], [Discount] FROM [Order Details] WHERE ([OrderID] = @OrderID)" >
    <SelectParameters>
        <asp:ControlParameter ControlID="master" DefaultValue="0" Name="OrderID" 
            PropertyName="SelectedValue" Type="Int32" />
    </SelectParameters>
    </asp:SqlDataSource>

Обратите внимание на SelectParameters и использование ControlParameter, который ищет ключ данных выбранной записи в главном GridView.

EDIT Поскольку вы используете свою собственную базу данных с разными именами полей, измените SQL соответствующим образом.

FROM [FS_LOG_PS2FS_Validation] WHERE ([P2FV_ProcessId] = @LOG_ProcessId)

и измените SelectParameter

<SelectParameters>
    <asp:ControlParameter ControlID="master" DefaultValue="0" Name="LOG_ProcessId" 
        PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>

Кроме того, вам нужно установить атрибут DataKeyNames в главном GridView

  <asp:GridView ID="master" runat="server" DataSourceID="sdsMaster" 
            AutoGenerateColumns="False" DataKeyNames="LOG_ProcessID" AllowPaging="True" >
        <Columns>

Я не думаю, что вам нужно устанавливать DataKeyNames подробного GridView. Вы можете изменить это там также для полноты. Я использовал смарт-тег в представлении разработки Visual Studio 2008 для создания примера кода. Дайте мне знать, если это не ясно.

РЕДАКТИРОВАТЬ 2 Вот несколько ссылок, описывающих настройку элементов управления данными ASP.NET.

Master / Detail, используя выбираемый основной GridView с подробным ViewView

Запрос данных с помощью элемента управления SqlDataSource

Учебники по доступу к данным

0 голосов
/ 25 марта 2010

Вы можете сделать это следующим образом:

Когда вы щелкаете по одной строке из таблицы 1, вы должны вызвать событие в файле codebehind (посмотрите на SelectedIndexChanged, показанный ниже).Внутри этого события вы должны выполнить запрос к таблице файлов XML, чтобы найти те, которые имеют одинаковый идентификатор процесса для строки, выбранной в сетке 1. В результате такого запроса вы привязываете его к сетке 2.

  void LOG_GridView_SelectedIndexChanged(Object sender, EventArgs e)
  {
    // Get the currently selected row using the SelectedRow property.
    GridViewRow row = CustomersGridView.SelectedRow;

    // Do your logic here to query and databind to Grid 2...
  }

Запишите это в своем объявлении Grid1:

<asp:GridView ID="LOG_GridView" runat="server" AllowPaging="True" AutoGenerateColumns="False"
            CellPadding="4" DataSourceID="FS_PS2FS" ForeColor="#333333" Height="300px" Width="943px" HorizontalAlign="Center" CssClass="AlternatingRowStyle" PageSize="6" SelectedIndex="0" OnSelectedIndexChanging="LOG_GridView_SelectedIndexChanging" BorderColor="#999999" onselectedindexchanged="LOG_GridView_SelectedIndexChanged">

Для получения дополнительной информации о событиях GridView, посмотрите на эти страницы в MSDN:

GridView .. ::. SelectedRow Property

Класс GridView

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