Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Gridview OnRowCreated事件被触发多次-dropdownlist被填充两次_C#_Asp.net_Gridview_Event Handling - Fatal编程技术网

C# Gridview OnRowCreated事件被触发多次-dropdownlist被填充两次

C# Gridview OnRowCreated事件被触发多次-dropdownlist被填充两次,c#,asp.net,gridview,event-handling,C#,Asp.net,Gridview,Event Handling,附加下面的代码-这是一个简单的代码,它只是初始化下拉列表(调用ddl.Clear())并添加一个带有文本“select”的项,该文本的值为“-1” Filldropdowns(ddl)是获取特定数据并将其填充到dropdown方法中的方法。这些方法在正常DropDownList的gridview之外单独运行良好 发生的情况是,对每个gridview行多次调用此eventhandler。最终结果是,下拉列表包含的值是它们应该包含的值的两倍(整个值集只是重复) 有人知道为什么会这样吗?关闭appen

附加下面的代码-这是一个简单的代码,它只是初始化下拉列表(调用ddl.Clear())并添加一个带有文本“select”的项,该文本的值为“-1”

Filldropdowns(ddl)是获取特定数据并将其填充到dropdown方法中的方法。这些方法在正常DropDownList的gridview之外单独运行良好

发生的情况是,对每个gridview行多次调用此eventhandler。最终结果是,下拉列表包含的值是它们应该包含的值的两倍(整个值集只是重复)

有人知道为什么会这样吗?关闭appenddatabounditems不是一个选项,因为我需要在“选择”下面追加项目

奇怪的是,当我调试时,即使是在第二次调用同一行时,它也显示DropDownValue包含零项,然后包含所需数量的项。但当我到达grdAccountsMapping_DataBound()处理程序时,它显示的项目数是原来的两倍

public void grdAccountsMapping_RowCreated(object sender, GridViewRowEventArgs e)
{
    GridViewRow row = e.Row;

    if (row.RowType == DataControlRowType.DataRow)
    {
        DropDownList ddlGrdFeeFormat = (DropDownList)row.FindControl("ddlFeeFormat");
        DropDownList ddlGrdTransactionMode = (DropDownList)row.FindControl("ddlTransactionMode");
        DropDownList ddlGrdFeeParticular = (DropDownList)row.FindControl("ddlFeeParticular");
        DropDownList ddlGrdCompany = (DropDownList)row.FindControl("ddlCompany");
        DropDownList ddlGrdAccounts = (DropDownList)row.FindControl("ddlAccounts");
        DropDownList ddlGrdFeeBook = (DropDownList)row.FindControl("ddlFeeBook");

        InitializeDropdown(ddlGrdFeeBook);
        InitializeDropdown(ddlGrdFeeFormat);
        InitializeDropdown(ddlGrdTransactionMode);
        InitializeDropdown(ddlGrdFeeParticular);
        InitializeDropdown(ddlGrdCompany);

        getDDLValues.FillFeeBooks(ddlGrdFeeBook);
        getDDLValues.FillFeeFormats(ddlGrdFeeFormat);
        getDDLValues.FillPaymentModes(ddlGrdTransactionMode);
        getDDLValues.FillFeeParticulars(ddlGrdFeeParticular);
        getDDLValues.FillAccountingCompanies(ddlGrdCompany);
    }
}
aspx页面网格定义如下所示

<asp:GridView CssClass="Grid" ID="grdAccountsMapping" runat="server" Width="98%"
EmptyDataText="No records found in this section" EmptyDataRowStyle-Height="40px"
AutoGenerateColumns="False" AccessKey="2" DataKeyNames="FAM_MAP_ID" OnRowCommand="grdAccountsMapping_RowCommand"
OnRowCreated="grdAccountsMapping_RowCreated" OnDataBound="grdAccountsMapping_DataBound"
Visible="false">
<AlternatingRowStyle CssClass="alternateGridItem" HorizontalAlign="Left" />
<RowStyle CssClass="gridItem" HorizontalAlign="Left" />
<EmptyDataRowStyle CssClass="gridItem" HorizontalAlign="Center" Font-Bold="True"
    ForeColor="Red" Height="40px" VerticalAlign="Middle" />
<HeaderStyle CssClass="tabledarklabel" />
<FooterStyle CssClass="Grid_Footer" />
<Columns>
    <asp:TemplateField HeaderText="Fee Book">
        <ItemTemplate>
            <asp:DropDownList ID="ddlGrdFeeBook" CssClass="dropdownwidth3" runat="server" AppendDataBoundItems="True">
            </asp:DropDownList>
        </ItemTemplate>
        <ItemStyle HorizontalAlign="Center" />
        <HeaderStyle Width="5%" />
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Fee Format">
        <ItemTemplate>
            <asp:DropDownList ID="ddlGrdFeeFormat" CssClass="dropdownwidth3" runat="server" AppendDataBoundItems="True">
            </asp:DropDownList>
        </ItemTemplate>
        <ItemStyle HorizontalAlign="Center" />
        <HeaderStyle Width="5%" />
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Transaction Mode">
        <ItemTemplate>
            <asp:DropDownList ID="ddlGrdTransactionMode" CssClass="dropdownwidth3" runat="server"
                AppendDataBoundItems="True" >
            </asp:DropDownList>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Fee Particulars">
        <ItemTemplate>
            <asp:DropDownList ID="ddlGrdFeeParticular" CssClass="dropdownwidth3" runat="server"
                AppendDataBoundItems="True">
            </asp:DropDownList>
        </ItemTemplate>
        <ItemStyle HorizontalAlign="Center" />
        <HeaderStyle Width="5%" />
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Company">
        <ItemTemplate>
            <asp:DropDownList ID="ddlGrdCompany" CssClass="dropdownwidth3" runat="server" AppendDataBoundItems="True">
            </asp:DropDownList>
        </ItemTemplate>
        <ItemStyle HorizontalAlign="Center" />
        <HeaderStyle Width="5%" />
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Account">
        <ItemTemplate>
            <asp:DropDownList ID="ddlGrdAccounts" CssClass="dropdownwidth3" runat="server" AppendDataBoundItems="True">
            </asp:DropDownList>
        </ItemTemplate>
        <ItemStyle HorizontalAlign="Center" />
        <HeaderStyle Width="5%" />
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Active">
        <ItemTemplate>
            <asp:CheckBox ID="chkActive" runat="server" />
        </ItemTemplate>
        <ItemStyle HorizontalAlign="Center" />
        <HeaderStyle Width="5%" />
    </asp:TemplateField>
</Columns>
<PagerSettings Visible="False" />
<PagerStyle BorderStyle="None" />
</asp:GridView>


使用的其他方法只是检索所需数据的数据集,将其分配给下拉列表的datasourceo,然后将其绑定到dropdownlist控件。这些方法在网格外的下拉列表上工作得很好,我已经对它们进行了单元测试——所以我确信问题不在那里

如何绑定网格?您多次调用DataBind()和/或Rebind()是出于意外吗?

我们刚刚删除了该文件并重新创建了它,它似乎可以正常工作。我没有太多的时间去挖掘细节,因为我们已经到了最后期限,但维德的问题已经不再发生了

不,它只绑定了一次。你能发布完整的代码吗?很难根据你最初发布的内容来判断到底发生了什么。当调用gridviewrows之外的下拉列表时,所有的方法调用都可以正常工作-这是它唯一给出问题的网格。因此,我只针对这段代码来确定问题的范围。好吧,如果您没有订阅codebehind中创建的OnRowCreated以及aspx中声明的OnRowCreated,或者多次绑定/重新绑定,那么这确实非常奇怪!!我能想到的唯一原因是您可能多次订阅了RowCreated(在您的情况下是两次),可能一次在标记中,一次在代码隐藏中。不,我也发布了标记-代码隐藏文件中没有发生订阅。我现在通过使用RowDataBound事件处理程序(而不是上面的)修复了此问题-在那里,它工作得很好。但我仍然有兴趣知道为什么上述方法不起作用。