ASP.net中的GridView; C#

时间:2010-03-25 15:20:56

标签: c# asp.net gridview

我正在使用C#和ASP.net创建网格视图...我需要帮助创建2个网格视图,它们具有相同的processID并从同一数据库中的不同SQL表中获取数据。当我单击第一行的第一行时第一个gridview它应该给我带有相同processID的文件列表及其在第二个gridview中的详细信息

一个进程ID中存储了许多不同的xml文件 例如第一个gridview中的processID = 7A413EA4-8ECE-472D-92BE-F58C22E5C567 所以在第二个表中具有相同processID的用户名,日期,登录日期的所有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 :(得分:0)

您可以通过以下方式执行此操作:

当您从网格1中单击一行时,您应该在代码隐藏文件上触发一个事件(请查看下面显示的SelectedIndexChanged)。在此事件中,您应查询XML文件表以查找在网格1上选择的行具有相同进程ID的那些。使用此类查询的结果将其绑定到网格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 Class

答案 1 :(得分:0)

基本上你想要创建一个主/细节屏幕......这是这个功课吗?在任何情况下,您都希望将事件(已更改选定的索引)添加到第一个网格。然后在那里添加代码来设置数据源或“过滤”第二个网格中的数据,如果还没有,你可能还会选择在此时看到第二个网格。

第二个网格的数据源需要一个“WHERE”子句,它将比较数据源中的processID和第一个网格中选择的processID。您可以将第一个网格的数据键设置为此字段(processID)以便于检索。

祝你好运!

答案 2 :(得分:0)

您应该可以通过标记完成所有操作。以下是使用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的详细信息中,使用绑定到主GridView中所选主键的SQL where子句:

<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中查找所选记录的数据键。

修改 由于您使用自己的数据库具有不同的字段名称,因此相应地修改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>

此外,您需要在主GridView中设置DataKeyNames属性

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

我认为您不需要设置详细GridView的DataKeyNames。您也可以在那里更改它以获得完整性。我在Visual Studio 2008设计视图中使用了智能标记来生成示例代码。如果不清楚,请告诉我。

编辑2 以下是一些描述配置ASP.NET数据控件的链接。

Master/Detail Using a Selectable Master GridView with a Details DetailView

Querying Data with the SqlDataSource Control

Data Access Tutorials