asp.net嵌套gridview模板控件

问题描述 投票:0回答:1

我在gridview的“ ItemTemplate”中有一个gridview。外部gridview(gvPOs)具有“选择”选项。由于我的sql数据源是通过后面的代码处理的,而不是通过设计模式通过sqldatasource处理的,因此没有“启用选择”,“启用删除”等。因此,我在“编辑列”下添加了select作为CommandField。通常,当gridview本身是一个,而我使用表数据显示一个formview来显示该信息时,我只需填写where子句以显示ID来自gvPOs.SelectedValue控件的位置,它将显示该特定行。但是在这种情况下,由于存在嵌套的gridview,出于某种原因,当我这样做时,“选择”什么也没做。

Output

我正在尝试在外部gridview的最右列上进行选择,以打开与PO_ID对应的formview。

左侧只是为了显示它在做什么。单击左侧的扩展按钮时,第二个网格视图会弹出,其中包含具有该PO_ID的记录。我的总体目标是能够从两个表中添加,删除和编辑记录。

后面的代码:

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.SqlClient;
    using System.Configuration;
   namespace PO_1_5_15
{
    public partial class _Webform : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                gvPOs.DataSource = GetData("select * from dbo.po_table");
                gvPOs.DataBind();

                FormView1.Visible = false;

            }

        }

        protected void gvTasks_RowDataBound(Object sender, GridViewRowEventArgs e)
        {
            gvPOs.DataBind();
        }



        private static DataTable GetData(string query)
        {
            string constr = ConfigurationManager.ConnectionStrings["Test_DatabaseConnectionString3"].ConnectionString;
            using (SqlConnection con = new SqlConnection(constr))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.CommandText = query;
                    using (SqlDataAdapter sda = new SqlDataAdapter())
                    {
                        cmd.Connection = con;
                        sda.SelectCommand = cmd;
                        using (DataSet ds = new DataSet())
                        {
                            DataTable dt = new DataTable();
                            sda.Fill(dt);
                            return dt;
                        }
                    }
                }
            }
        }

        protected void Show_Hide_ChildGrid(object sender, EventArgs e)
{
    ImageButton imgShowHide = (sender as ImageButton);
    GridViewRow row = (imgShowHide.NamingContainer as GridViewRow);

    if (imgShowHide.CommandArgument == "Show")
    {
        row.FindControl("pnlTasks").Visible = true;
        imgShowHide.CommandArgument = "Hide";
        imgShowHide.ImageUrl = "~/images/minus.png";
        string POId = gvPOs.DataKeys[row.RowIndex].Value.ToString();
        GridView gvTasks = row.FindControl("gvTasks") as GridView; gvTasks.ToolTip = POId;

        gvTasks.DataSource = GetData(string.Format("select * from task where po_Id='{0}'", POId));
        gvTasks.DataBind();
    }
    else
    {
        row.FindControl("pnlTasks").Visible = false;
        imgShowHide.CommandArgument = "Show";
        imgShowHide.ImageUrl = "~/images/plus.png";
    }
}



private void BindTasks(string POId, GridView gvTasks)
{
    gvTasks.ToolTip = POId;
    gvTasks.DataSource = GetData(string.Format("select * from task where po_Id='{0}'", POId));
    gvTasks.DataBind();
}
protected void OnChildGrid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView gvTasks = (sender as GridView);
    gvTasks.PageIndex = e.NewPageIndex;
    BindTasks(gvTasks.ToolTip, gvTasks);
}

protected void Button1_Click(object sender, EventArgs e)
{
    FormView1.Visible = true;
 //   FormView2.Visible = false;
}

protected void Button2_Click(object sender, EventArgs e)
{
 //   FormView2.Visible = true;
    FormView1.Visible = false;
}

protected void FormView1_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
    gvPOs.DataBind();
}



protected void gvTasks_SelectedIndexChanged(object sender, EventArgs e)
{
    gvPOs.DataBind();
}
    }
}

HTML标记:

 <%@ Page Language="C#" EnableEventValidation="false" AutoEventWireup="true" CodeBehind="Webform.aspx.cs" Inherits="PO_1_5_15._Webform" %>

<%@ Register assembly="System.Web.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" namespace="System.Web.UI.WebControls" tagprefix="asp" %>

<!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></title>
    <style type="text/css">
        .ChildGrid {
            margin-right: 2px;
        }
        .Grid {
            margin-right: 30px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Add PO" />
            <br />
            <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Add Task" />
            <br />
            <asp:GridView ID="gvPOs" runat="server" AutoGenerateColumns="False" CssClass="Grid"
    DataKeyNames="PO_ID" EnableModelValidation="True" >

    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:ImageButton ID="imgShow" runat="server" OnClick="Show_Hide_ChildGrid" ImageUrl="~/images/plus.png"
                    CommandArgument="Show" />
                <asp:Panel ID="pnlTasks" runat="server" Visible="false" Style="position: relative">
                    <asp:GridView ID="gvTasks" runat="server" AutoGenerateColumns="False" PageSize="5" 
                        AllowPaging="True" OnPageIndexChanging="OnChildGrid_PageIndexChanging" CssClass="ChildGrid" EnableModelValidation="True">
                        <Columns>
                            <asp:BoundField ItemStyle-Width="150px" DataField="PO_ID" HeaderText="PO #" >
                             <ItemStyle Width="150px" />
                            </asp:BoundField>
                             <asp:BoundField ItemStyle-Width="150px" DataField="Invoice_No" HeaderText="Invoice #" >
                             <ItemStyle Width="150px" />
                            </asp:BoundField>
                             <asp:BoundField ItemStyle-Width="150px" DataField="Invoice_Date" HeaderText="Invoice Date" >
                            <ItemStyle Width="150px" />
                            </asp:BoundField>
                            <asp:BoundField ItemStyle-Width="150px" DataField="Task_Note" HeaderText="Task Note" >
                             <ItemStyle Width="150px" />
                            </asp:BoundField>
                             <asp:BoundField ItemStyle-Width="150px" DataField="Username" HeaderText="Username" >
                             <ItemStyle Width="150px" />
                            </asp:BoundField>
                             <asp:BoundField ItemStyle-Width="150px" DataField="UserDate" HeaderText="Current Date/Time" >
                             <ItemStyle Width="150px" />
                            </asp:BoundField>
                             <asp:BoundField ItemStyle-Width="150px" DataField="_Status" HeaderText="Status" >
                             <ItemStyle Width="150px" />
                            </asp:BoundField>
                             <asp:BoundField ItemStyle-Width="150px" DataField="Cost" HeaderText="Cost" >
                              <ItemStyle Width="150px" />
                            </asp:BoundField>
                              <asp:BoundField ItemStyle-Width="150px" DataField="Services" HeaderText="Service" >
                            <ItemStyle Width="150px" />
                            </asp:BoundField>
                            <asp:CommandField ShowSelectButton="True" />
                        </Columns>
                    </asp:GridView>
                </asp:Panel>
                <br />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField ItemStyle-Width="150px" DataField="PO_ID" HeaderText="PO #" >
<ItemStyle Width="150px"></ItemStyle>
        </asp:BoundField>
          <asp:BoundField ItemStyle-Width="150px" DataField="Invoice_No" HeaderText="Invoice #" >
<ItemStyle Width="150px"></ItemStyle>
        </asp:BoundField>
        <asp:BoundField ItemStyle-Width="150px" DataField="Username" HeaderText="Username" >
<ItemStyle Width="150px"></ItemStyle>
        </asp:BoundField>
        <asp:BoundField ItemStyle-Width="150px" DataField="UserDate" HeaderText="Current Date/Time" >
<ItemStyle Width="150px"></ItemStyle>
        </asp:BoundField>
        <asp:BoundField ItemStyle-Width="150px" DataField="PO_Note" HeaderText="PO Note" >
<ItemStyle Width="150px"></ItemStyle>
        </asp:BoundField>
        <asp:CommandField ShowSelectButton="True" />
    </Columns>
</asp:GridView>

            <br />
            <asp:FormView ID="FormView1" runat="server" DataKeyNames="PO_AutoID" DataSourceID="SqlDataSource1" EnableModelValidation="True" OnPageIndexChanging="FormView1_PageIndexChanging">
                <EditItemTemplate>
                    PO_AutoID:
                    <asp:Label ID="PO_AutoIDLabel1" runat="server" Text='<%# Eval("PO_AutoID") %>' />
                    <br />
                    PO_ID:
                    <asp:TextBox ID="PO_IDTextBox" runat="server" Text='<%# Bind("PO_ID") %>' />
                    <br />
                    PO_Title:
                    <asp:TextBox ID="PO_TitleTextBox" runat="server" Text='<%# Bind("PO_Title") %>' />
                    <br />
                    Date_Received:
                    <asp:TextBox ID="Date_ReceivedTextBox" runat="server" Text='<%# Bind("Date_Received") %>' />
                    <br />
                    Date_Completed:
                    <asp:TextBox ID="Date_CompletedTextBox" runat="server" Text='<%# Bind("Date_Completed") %>' />
                    <br />
                    Username:
                    <asp:TextBox ID="UsernameTextBox" runat="server" Text='<%# Bind("Username") %>' />
                    <br />
                    UserDate:
                    <asp:TextBox ID="UserDateTextBox" runat="server" Text='<%# Bind("UserDate") %>' />
                    <br />
                    PO_Note:
                    <asp:TextBox ID="PO_NoteTextBox" runat="server" Text='<%# Bind("PO_Note") %>' />
                    <br />
                    Department:
                    <asp:TextBox ID="DepartmentTextBox" runat="server" Text='<%# Bind("Department") %>' />
                    <br />
                    Invoice_No:
                    <asp:TextBox ID="Invoice_NoTextBox" runat="server" Text='<%# Bind("Invoice_No") %>' />
                    <br />
                    <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="Update" />
                    &nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
                </EditItemTemplate>
                <InsertItemTemplate>
                    PO_ID:
                    <asp:TextBox ID="PO_IDTextBox" runat="server" Text='<%# Bind("PO_ID") %>' />
                    <br />
                    PO_Title:
                    <asp:TextBox ID="PO_TitleTextBox" runat="server" Text='<%# Bind("PO_Title") %>' />
                    <br />
                    Date_Received:
                    <asp:TextBox ID="Date_ReceivedTextBox" runat="server" Text='<%# Bind("Date_Received") %>' />
                    <br />
                    Date_Completed:
                    <asp:TextBox ID="Date_CompletedTextBox" runat="server" Text='<%# Bind("Date_Completed") %>' />
                    <br />
                    Username:
                    <asp:TextBox ID="UsernameTextBox" runat="server" Text='<%# Bind("Username") %>' />
                    <br />
                    UserDate:
                    <asp:TextBox ID="UserDateTextBox" runat="server" Text='<%# Bind("UserDate") %>' />
                    <br />
                    PO_Note:
                    <asp:TextBox ID="PO_NoteTextBox" runat="server" Text='<%# Bind("PO_Note") %>' />
                    <br />
                    Department:
                    <asp:TextBox ID="DepartmentTextBox" runat="server" Text='<%# Bind("Department") %>' />
                    <br />
                    Invoice_No:
                    <asp:TextBox ID="Invoice_NoTextBox" runat="server" Text='<%# Bind("Invoice_No") %>' />
                    <br />
                    <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert" Text="Insert" />
                    &nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
                </InsertItemTemplate>
                <ItemTemplate>
                    PO_AutoID:
                    <asp:Label ID="PO_AutoIDLabel" runat="server" Text='<%# Eval("PO_AutoID") %>' />
                    <br />
                    PO_ID:
                    <asp:Label ID="PO_IDLabel" runat="server" Text='<%# Bind("PO_ID") %>' />
                    <br />
                    PO_Title:
                    <asp:Label ID="PO_TitleLabel" runat="server" Text='<%# Bind("PO_Title") %>' />
                    <br />
                    Date_Received:
                    <asp:Label ID="Date_ReceivedLabel" runat="server" Text='<%# Bind("Date_Received") %>' />
                    <br />
                    Date_Completed:
                    <asp:Label ID="Date_CompletedLabel" runat="server" Text='<%# Bind("Date_Completed") %>' />
                    <br />
                    Username:
                    <asp:Label ID="UsernameLabel" runat="server" Text='<%# Bind("Username") %>' />
                    <br />
                    UserDate:
                    <asp:Label ID="UserDateLabel" runat="server" Text='<%# Bind("UserDate") %>' />
                    <br />
                    PO_Note:
                    <asp:Label ID="PO_NoteLabel" runat="server" Text='<%# Bind("PO_Note") %>' />
                    <br />
                    Department:
                    <asp:Label ID="DepartmentLabel" runat="server" Text='<%# Bind("Department") %>' />
                    <br />
                    Invoice_No:
                    <asp:Label ID="Invoice_NoLabel" runat="server" Text='<%# Bind("Invoice_No") %>' />
                    <br />
                    <asp:LinkButton ID="EditButton" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit" />
                    &nbsp;<asp:LinkButton ID="DeleteButton" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" />
                    &nbsp;<asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" CommandName="New" Text="New" />
                </ItemTemplate>
            </asp:FormView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Test_DatabaseConnectionString3 %>" SelectCommand="SELECT * FROM [PO_Table] WHERE ([PO_ID] = @PO_ID)" DeleteCommand="DELETE FROM [PO_Table] WHERE [PO_AutoID] = @PO_AutoID" InsertCommand="INSERT INTO [PO_Table] ([PO_ID], [PO_Title], [Date_Received], [Date_Completed], [Username], [UserDate], [PO_Note], [Department], [Invoice_No]) VALUES (@PO_ID, @PO_Title, @Date_Received, @Date_Completed, @Username, @UserDate, @PO_Note, @Department, @Invoice_No)" UpdateCommand="UPDATE [PO_Table] SET [PO_ID] = @PO_ID, [PO_Title] = @PO_Title, [Date_Received] = @Date_Received, [Date_Completed] = @Date_Completed, [Username] = @Username, [UserDate] = @UserDate, [PO_Note] = @PO_Note, [Department] = @Department, [Invoice_No] = @Invoice_No WHERE [PO_AutoID] = @PO_AutoID">
                <DeleteParameters>
                    <asp:Parameter Name="PO_AutoID" Type="Int32" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter Name="PO_ID" Type="Int32" />
                    <asp:Parameter Name="PO_Title" Type="String" />
                    <asp:Parameter Name="Date_Received" Type="DateTime" />
                    <asp:Parameter Name="Date_Completed" Type="DateTime" />
                    <asp:Parameter Name="Username" Type="String" />
                    <asp:Parameter Name="UserDate" Type="DateTime" />
                    <asp:Parameter Name="PO_Note" Type="String" />
                    <asp:Parameter Name="Department" Type="String" />
                    <asp:Parameter Name="Invoice_No" Type="String" />
                </InsertParameters>
                <SelectParameters>
                    <asp:ControlParameter ControlID="gvPOs" Name="PO_ID" PropertyName="SelectedValue" Type="Int32" />
                </SelectParameters>
                <UpdateParameters>
                    <asp:Parameter Name="PO_ID" Type="Int32" />
                    <asp:Parameter Name="PO_Title" Type="String" />
                    <asp:Parameter Name="Date_Received" Type="DateTime" />
                    <asp:Parameter Name="Date_Completed" Type="DateTime" />
                    <asp:Parameter Name="Username" Type="String" />
                    <asp:Parameter Name="UserDate" Type="DateTime" />
                    <asp:Parameter Name="PO_Note" Type="String" />
                    <asp:Parameter Name="Department" Type="String" />
                    <asp:Parameter Name="Invoice_No" Type="String" />
                    <asp:Parameter Name="PO_AutoID" Type="Int32" />
                </UpdateParameters>
            </asp:SqlDataSource>
            <br />
            <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:Test_DatabaseConnectionString3 %>" DeleteCommand="DELETE FROM [Task] WHERE [Task_AutoID] = @Task_AutoID" InsertCommand="INSERT INTO [Task] ([PO_AutoID], [PO_ID], [Task_Title], [Username], [UserDate], [Cost], [_Status], [Invoice_Date], [Paid_Date], [Task_Note], [Department], [Invoice_No], [Services]) VALUES (@PO_AutoID, @PO_ID, @Task_Title, @Username, @UserDate, @Cost, @column1, @Invoice_Date, @Paid_Date, @Task_Note, @Department, @Invoice_No, @Services)" SelectCommand="SELECT * FROM [Task]" UpdateCommand="UPDATE [Task] SET [PO_AutoID] = @PO_AutoID, [PO_ID] = @PO_ID, [Task_Title] = @Task_Title, [Username] = @Username, [UserDate] = @UserDate, [Cost] = @Cost, [_Status] = @column1, [Invoice_Date] = @Invoice_Date, [Paid_Date] = @Paid_Date, [Task_Note] = @Task_Note, [Department] = @Department, [Invoice_No] = @Invoice_No, [Services] = @Services WHERE [Task_AutoID] = @Task_AutoID">
                <DeleteParameters>
                    <asp:Parameter Name="Task_AutoID" Type="Int32" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter Name="PO_AutoID" Type="Int32" />
                    <asp:Parameter Name="PO_ID" Type="Int32" />
                    <asp:Parameter Name="Task_Title" Type="String" />
                    <asp:Parameter Name="Username" Type="String" />
                    <asp:Parameter Name="UserDate" Type="DateTime" />
                    <asp:Parameter Name="Cost" Type="Decimal" />
                    <asp:Parameter Name="column1" Type="String" />
                    <asp:Parameter Name="Invoice_Date" Type="DateTime" />
                    <asp:Parameter Name="Paid_Date" Type="DateTime" />
                    <asp:Parameter Name="Task_Note" Type="String" />
                    <asp:Parameter Name="Department" Type="String" />
                    <asp:Parameter Name="Invoice_No" Type="String" />
                    <asp:Parameter Name="Services" Type="String" />
                </InsertParameters>
                <UpdateParameters>
                    <asp:Parameter Name="PO_AutoID" Type="Int32" />
                    <asp:Parameter Name="PO_ID" Type="Int32" />
                    <asp:Parameter Name="Task_Title" Type="String" />
                    <asp:Parameter Name="Username" Type="String" />
                    <asp:Parameter Name="UserDate" Type="DateTime" />
                    <asp:Parameter Name="Cost" Type="Decimal" />
                    <asp:Parameter Name="column1" Type="String" />
                    <asp:Parameter Name="Invoice_Date" Type="DateTime" />
                    <asp:Parameter Name="Paid_Date" Type="DateTime" />
                    <asp:Parameter Name="Task_Note" Type="String" />
                    <asp:Parameter Name="Department" Type="String" />
                    <asp:Parameter Name="Invoice_No" Type="String" />
                    <asp:Parameter Name="Services" Type="String" />
                    <asp:Parameter Name="Task_AutoID" Type="Int32" />
                </UpdateParameters>
            </asp:SqlDataSource>

            <br />
            <br />

        </div>
    </form>
</body>
</html>
c# asp.net gridview nested
1个回答
0
投票

我无法100%理解您的问题。如果要使用嵌套的GridView,请在父GridView的Row_DataBound事件中绑定子GridView。确保在if(!Page.IsPostBack)条件内绑定父Gridview,因此一旦按下选择按钮,它将不会绑定父GridView。

© www.soinside.com 2019 - 2024. All rights reserved.