多个网格视图之间的冲突

时间:2012-10-11 23:56:40

标签: c# asp.net gridview insert

我在一个页面上有多个网格视图。对于每个gridview,有两种方法可以插入新记录。一个是当gridview有数据时通过TemplateField的FooterTemplate,另一个是当gridview为空时通过EmptyDataTemplate。

单独使用,插件效果很好。但是,如果另一个gridview为空,则默认情况下会显示其EmptyDataTemplate中的插入部分。显示时,我无法显示另一个gridview的FooterTemplate。在我通过强制插入来摆脱EmptyDataTemplate之前,该部分是不可访问的。

<asp:Button ID="btnAddNewDomSoilType" runat="server" Text="Add new record"  CssClass="btnNewRecord" OnClick="addNewDomSoilType" />              
<asp:GridView ID="gvDomSoilType" runat="server" AllowPaging="True" 
AutoGenerateColumns="False" DataSourceID="dsDomSoilType" CssClass="data" 
AllowSorting="True" onrowcommand="gvDomSoilType_RowCommand" DataKeyNames="HabitatObsSubstrateID, HabitatObservationID, SubstrateID" >
    <Columns>                        
    <asp:TemplateField ShowHeader="False">                            
        <ItemTemplate>
            <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
                CommandName="Delete" Text="Delete" 
                OnClientClick="return confirm('Are you sure?');"
                AlternateText="Delete" ForeColor="Blue"></asp:LinkButton>
        </ItemTemplate>
        <FooterTemplate>
            <asp:Button ID="btnInsertSubmit" runat="server" Text="Submit" CommandName="SubmitInsert" CssClass="btnInsertSEID" />
            <asp:Button ID="btnInsertCancel" runat="server" Text="Cancel" CommandName="CancelInsert" CssClass="btnInsertSEID" CausesValidation="false" />
        </FooterTemplate>
    </asp:TemplateField>                        
    <asp:TemplateField HeaderText="Substrate" SortExpression="Substrate">
        <FooterTemplate>
            <asp:DropDownList ID="ddlSoilType" runat="server" 
                DataSourceID="dsDomSoilType_Insert" DataTextField="Description" 
                DataValueField="Value" AppendDataBoundItems="true">
                <asp:ListItem Text="" Value="" Selected="True"></asp:ListItem>
            </asp:DropDownList>                          
        </FooterTemplate>
        <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%# Bind("Substrate") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
    </Columns>
    <EmptyDataTemplate>
    <asp:Label ID="Label4" runat="server" Text="Substrate: " CssClass="insertLabel"></asp:Label> 
    <asp:DropDownList ID="ddlSoilType2" runat="server" 
        DataSourceID="dsDomSoilType_Insert" DataTextField="Description" 
        DataValueField="Value" AppendDataBoundItems="true">
        <asp:ListItem Text="" Value="" Selected="True"></asp:ListItem>
    </asp:DropDownList>
    <asp:Button ID="btnInsertEmpty" runat="Server" Text="Insert" CommandName="EmptyInsert" UseSubmitBehavior="False" />
</EmptyDataTemplate>
</asp:GridView>    

<asp:Button ID="btnAddNewVegCover" runat="server" Text="Add new record"  CssClass="btnNewRecord" OnClick="addNewVegCover" />
<asp:GridView ID="gvVegCover" runat="server" AllowPaging="True" 
AutoGenerateColumns="False" DataSourceID="dsVegCover" CssClass="data" 
AllowSorting="True" onrowcommand="gvVegCover_RowCommand" DataKeyNames="HabitatObsVegID">
    <Columns>
    <asp:TemplateField ShowHeader="False">                           
        <ItemTemplate>
            <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
                CommandName="Delete" Text="Delete" 
                OnClientClick="return confirm('Are you sure?');"
                AlternateText="Delete" ForeColor="Blue"></asp:LinkButton>
        </ItemTemplate>
        <FooterTemplate>
            <asp:Button ID="btnInsertSubmit" runat="server" Text="Submit" CommandName="SubmitInsert" CssClass="btnInsertSEID" />
            <asp:Button ID="btnInsertCancel" runat="server" Text="Cancel" CommandName="CancelInsert" CssClass="btnInsertSEID" CausesValidation="false" />
        </FooterTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="HabitatVegetationType" SortExpression="HabitatVegetationType">                            
        <FooterTemplate>
            <asp:DropDownList ID="ddlVegType" runat="server" 
                DataSourceID="dsVegType_Insert" DataTextField="Description" 
                DataValueField="Value" AppendDataBoundItems="true">
                <asp:ListItem Text="" Value="" Selected="True"></asp:ListItem>
            </asp:DropDownList>                                 
        </FooterTemplate>
        <ItemTemplate>
            <asp:Label ID="lblVegType" runat="server" Text='<%# Bind("HabitatVegetationType") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="VegetationTypePercent" SortExpression="VegetationTypePercent">                            
        <FooterTemplate>                                    
            <asp:TextBox ID="txtVegTypePercent" runat="server"></asp:TextBox>               
        </FooterTemplate>
        <ItemTemplate>
            <asp:Label ID="lblVegTypePercentage" runat="server" Text='<%# Bind("VegetationTypePercent") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>                                                     
    </Columns>
    <EmptyDataTemplate>
    <asp:Label ID="Label2" runat="server" Text="Vegetation Type:" CssClass="insertLabel"></asp:Label>  
    <asp:DropDownList ID="ddlVegType2" runat="server" 
        DataSourceID="dsVegType_Insert" DataTextField="Description" 
        DataValueField="Value" AppendDataBoundItems="true">
        <asp:ListItem Text="" Value="" Selected="True"></asp:ListItem>
    </asp:DropDownList>
    <asp:Label ID="Label5" runat="server" Text="Percenttage:" CssClass="insertLabel"></asp:Label>
    <asp:TextBox ID="txtVegTypePercent2" runat="server"></asp:TextBox>      
    <asp:Button ID="btnInsertEmpty" runat="Server" Text="Insert" CommandName="EmptyInsert" UseSubmitBehavior="False" />
    </EmptyDataTemplate>        
</asp:GridView>

代码背后:

    protected void addNewDomSoilType(object sender, EventArgs e)
    {
        gvDomSoilType.ShowFooter = true;
    }

    protected void addNewVegCover(object sender, EventArgs e)
    {
        gvVegCover.ShowFooter = true;
    }

我知道我的解释有点令人困惑。让我知道什么是没有意义的,我会尽力澄清。谢谢你的期待。

1 个答案:

答案 0 :(得分:0)

这两个网格视图不应相互影响。我认为可能是PostBack搞乱了网页的状态。在PageLoad do Page.IsPostBack为false,然后填充数据。确保事件连接到正确的GridView。