Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# DataGrid OnItemDataBound正在干扰DropDownList OnSelectedIndexChange事件_C#_Asp.net_Datagrid_Event Handling - Fatal编程技术网

C# DataGrid OnItemDataBound正在干扰DropDownList OnSelectedIndexChange事件

C# DataGrid OnItemDataBound正在干扰DropDownList OnSelectedIndexChange事件,c#,asp.net,datagrid,event-handling,C#,Asp.net,Datagrid,Event Handling,我有一个带有DataGrid的ASP.NET4.6.1网页。在DataGrid的TemplateColumn中,我有一个DropDownList。DropDownList具有OnSelectedIndexChanged事件处理程序: <asp:DataGrid runat="server" ID="dgPartnerApprovalPending" DataKeyField="OrderID" CellPadding="10" CellSpa

我有一个带有DataGrid的ASP.NET4.6.1网页。在DataGrid的TemplateColumn中,我有一个DropDownList。DropDownList具有OnSelectedIndexChanged事件处理程序:

<asp:DataGrid runat="server" ID="dgPartnerApprovalPending" DataKeyField="OrderID" 
                       CellPadding="10" CellSpacing="10" AlternatingItemStyle-BackColor="WhiteSmoke" HeaderStyle-BackColor="WhiteSmoke" AutoGenerateColumns="false" 
                        AllowSorting="true" OnSortCommand="dgPartnerApprovalPending_SortCommand">
                        <Columns>
                            <asp:BoundColumn DataField="AttorneyName" HeaderText="Attorney Name" SortExpression="AttorneyName" />
                            <asp:BoundColumn DataField="Title" HeaderText="Title" SortExpression="Title" />
                            <asp:BoundColumn DataField="Description" HeaderText="Description" SortExpression="Description" />
                            <asp:BoundColumn DataField="RequestDate" HeaderText="Request Date" SortExpression="RequestDate" />
                            <asp:BoundColumn DataField="TotalAmount" HeaderText="Total Amount" SortExpression="TotalAmount" />
                            <asp:BoundColumn DataField="OrderStatus" HeaderText="Order Status" SortExpression="OrderStatus" />
                            <asp:TemplateColumn HeaderText="Status">
                                <ItemTemplate>
                                    <asp:DropDownList runat="server" ID="ddlStatus" OnSelectedIndexChanged="ddlStatus_SelectedIndexChanged" AutoPostBack="true" 
                                        DataSourceID="sdsStatuses" DataTextField="OrderStatus" DataValueField="OrderStatusID" /> 
                                </ItemTemplate>
                            </asp:TemplateColumn>
                            <asp:BoundColumn DataField="OrderID" HeaderText="Order ID" SortExpression="OrderID" />
                            <asp:HyperLinkColumn Text="Files" DataNavigateUrlField="OrderID" DataNavigateUrlFormatString="~/Files/{0}" />
                        </Columns>
                    </asp:DataGrid>
OnSelectedIndexChanged事件处理程序工作正常,直到我将OnItemDataBound事件处理程序添加到DataGrid:

<asp:DataGrid runat="server" ID="dgPartnerApprovalPending" DataKeyField="OrderID" OnItemDataBound="dgPartnerApprovalPending_ItemDataBound" 
                       CellPadding="10" CellSpacing="10" AlternatingItemStyle-BackColor="WhiteSmoke" HeaderStyle-BackColor="WhiteSmoke" AutoGenerateColumns="false" 
                        AllowSorting="true" OnSortCommand="dgPartnerApprovalPending_SortCommand">
                        <Columns>
                            <asp:BoundColumn DataField="AttorneyName" HeaderText="Attorney Name" SortExpression="AttorneyName" />
                            <asp:BoundColumn DataField="Title" HeaderText="Title" SortExpression="Title" />
                            <asp:BoundColumn DataField="Description" HeaderText="Description" SortExpression="Description" />
                            <asp:BoundColumn DataField="RequestDate" HeaderText="Request Date" SortExpression="RequestDate" />
                            <asp:BoundColumn DataField="TotalAmount" HeaderText="Total Amount" SortExpression="TotalAmount" />
                            <asp:BoundColumn DataField="OrderStatus" HeaderText="Order Status" SortExpression="OrderStatus" />
                            <asp:TemplateColumn HeaderText="Status">
                                <ItemTemplate>
                                    <asp:DropDownList runat="server" ID="ddlStatus" OnSelectedIndexChanged="ddlStatus_SelectedIndexChanged" AutoPostBack="true" 
                                        DataSourceID="sdsStatuses" DataTextField="OrderStatus" DataValueField="OrderStatusID" /> 
                                </ItemTemplate>
                            </asp:TemplateColumn>
                            <asp:BoundColumn DataField="OrderID" HeaderText="Order ID" SortExpression="OrderID" />
                            <asp:HyperLinkColumn Text="Files" DataNavigateUrlField="OrderID" DataNavigateUrlFormatString="~/Files/{0}" />
                        </Columns>
                    </asp:DataGrid>
下面是触发ItemDataBound事件时调用的代码:

protected void dgPartnerApprovalPending_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        ListItemType itemType = (ListItemType)e.Item.ItemType;           

        if (itemType == ListItemType.Item || itemType == ListItemType.AlternatingItem)
        {
            DataRowView view = (DataRowView)e.Item.DataItem;
            string OrderID = view["OrderID"].ToString();

            for (int i = 0; i <= 6; i++)
            {
                e.Item.Cells[i].Attributes.Add("OnClick", "window.location.href='PartnerApprovalDetail.aspx?oid="
                + OrderID
                + "'"
                );
            }
        }
    }

简而言之,ItemDataBound事件使每一行都可以单击,并将用户重定向到不同的页面。添加此事件处理程序并加载页面后,无论何时单击任何行中的DropDownList,页面都将变为空白。如果在调试器中执行此操作,则永远不会触发SelectedIndexChanged事件。在使行可单击之后,我尝试将数据绑定到OnItemDataBound处理程序中的DropDownList。我还尝试在回发后将数据绑定到PageLoad中的DropDownList。两者都没有帮助。我该怎么做

您正在表格单元格中添加onclick事件处理程序,下拉列表在表格单元格中呈现。因此,当您尝试单击下拉列表时,在父表格单元格级别定义的事件处理程序会捕捉到单击事件,从而将用户引离

可以创建新的模板列以渲染详图链接:

    <asp:TemplateColumn HeaderText="Status">
       <ItemTemplate>
          <asp:HyperLink ID="DetailsUrls" runat="server" href="PartnerApprovalDetail.aspx?oid=<%#Eval("OrderID")%>">Detail</asp:HyperLink>
      </ItemTemplate>
    </asp:TemplateColumn>

莫辛,这个很好用。我使用了HyperLinkColumn而不是TemplateColumn,但不管怎样。非常感谢你!