私はVisual Studio 2010とSQL Server 2008を使用していて、sqldatasoureでgridviewを実装しています。また、gridviewのitemtemplateには、sqldatasourceとrowdataboundイベントでバインドされているドロップダウンリストこれらのドロップダウンリストに選択した値を割り当てています。グリッドを非常に遅くロードする2000年以上のレコードがあります。これを最適化するためのアイデア。ASP.NET Gridviewより多くのデータバインディングで遅い読み込み
<form id="form1" runat="server">
<div>
<asp:GridView ID="Gridview1" runat="server" DataSourceID="SqlDataSource1"
AutoGenerateColumns="False" onrowdatabound="Gridview1_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="Dropdownlist1" runat="server" DataSourceID="SqlDataSource2" DataTextField="empid" DataValueField="empname">
</asp:DropDownList>
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("empid") %>' />
<asp:DropDownList ID="Dropdownlist2" runat="server" DataSourceID="SqlDataSource3" DataTextField="desgid" DataValueField="desgname">
</asp:DropDownList>
<asp:HiddenField ID="HiddenField2" runat="server" Value='<%# Eval("desgid") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString='<%$ ConnectionStrings:dbconn %>'
SelectCommandType="StoredProcedure" SelectCommand="SP_Fetch_Grid"> </asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString='<%$ ConnectionStrings:dbconn %>'
SelectCommandType="StoredProcedure" SelectCommand="SP_Fetch_DDL1"></asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString='<%$ ConnectionStrings:dbconn %>'
SelectCommandType="StoredProcedure" SelectCommand="SP_Fetch_DDL2"></asp:SqlDataSource>
</div>
</form>
protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
HiddenField hf1 = (HiddenField)e.Row.FindControl("HiddenField1");
HiddenField hf2 = (HiddenField)e.Row.FindControl("HiddenField2");
DropDownList ddl1 = (DropDownList)e.Row.FindControl("DropDownList1");
DropDownList ddl2 = (DropDownList)e.Row.FindControl("DropDownList2");
ddl1.SelectedValue = hf1.Value;
ddl2.SelectedValue = hf2.Value;
}
}
UIを別の方法で設計することをお勧めします。 + 2000レコードのddlは、ユーザビリティの点でベストプラクティスではありません。 – aleafonso
@aleafonso私は、OPはGridViewの2000レコードを意味すると思います。 – jadarnel27
各行のリストから値を選択する必要があります。私は別の代替を見つけることができないと思う。 – DON