2011-06-29 7 views
1

私はEntityDataSourceを持つ単純なGridViewを持っています。私は後ろのコードにWhere Parametersを追加しようとしていますが、これは動作しますが、私はそれらをクリアできません。WhereParametersをEntityDataSourceでどのように削除しますか?

ASPX:

Id: <asp:TextBox runat="server" Text="" ID="IDValue"></asp:TextBox> 

    <asp:GridView ID="GridView1" runat="server" 
    AutoGenerateColumns="False" 

    DataSourceID="EntityDataSource1" AllowSorting="True" AllowPaging="True"> 

    <Columns> 
     <asp:TemplateField HeaderText="Action"> 
     <ItemTemplate> 
      <asp:HyperLink runat="server" ID="link" NavigateUrl='<%#Bind("CompanyId") %>'>Edit</asp:HyperLink> 
     </ItemTemplate> 
     <HeaderTemplate>Action</HeaderTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="CompanyId" HeaderText="CompanyId" ReadOnly="True" 
     SortExpression="CompanyId" /> 
     <asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" 
     SortExpression="Name" /> 
     <asp:BoundField DataField="BillingAddress" HeaderText="BillingAddress" 
     ReadOnly="True" SortExpression="BillingAddress" /> 
     <asp:BoundField DataField="BillingCity" HeaderText="BillingCity" 
     ReadOnly="True" SortExpression="BillingCity" /> 
    </Columns> 
    </asp:GridView> 

    <br /> 

    <asp:EntityDataSource ID="EntityDataSource1" runat="server" 
    ConnectionString="name=OrderITEntities" DefaultContainerName="OrderITEntities" 
    EnableFlattening="False" EntitySetName="Companies" EntityTypeFilter="Company" 
    Select="it.[CompanyId], it.[Name], it.[BillingAddress], it.[BillingCity]" 
    AutoGenerateOrderByClause="true" 
    AutoGenerateWhereClause="true" 
    > 

    <OrderByParameters> 
     <asp:Parameter DefaultValue="CompanyId" /> 
    </OrderByParameters> 

    </asp:EntityDataSource> 

    <asp:Button runat="server" Text="Submit" /> 

と背後にあるコードで:

protected override void OnInit(EventArgs e) 
{ 
    EntityDataSource1.WhereParameters.Clear(); 
    base.OnInit(e); 
} 


protected void Page_Load(object sender, EventArgs e) 
{ 
    EntityDataSource1.WhereParameters.Clear(); 

    if (IDValue.Text.Length > 0) 
    { 
    ControlParameter cp = new ControlParameter(); 
    cp.ControlID = "IDValue"; 
    cp.DbType = System.Data.DbType.Int32; 
    cp.Name = "CompanyId"; 
    cp.PropertyName = "Text"; 
    EntityDataSource1.WhereParameters.Add(cp); 
    } 
} 

EntityDataSource1.WhereParameters.Clear(); 

は、デバッガが言うにもかかわらず、どこのパラメータをクリアしていないようだということカウントは0です。

答えて

1

Page_Loadのコードの後に​​GridView1.DataBind()を呼び出してみてください。 initイベントは最初と最後のコントロールのために発生します。そのため、最初のページのinitイベントハンドラの前にバインディングされている可能性があります。

HTH。

0

これは機能します。 新しいコードの背後には、

public partial class _Default : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     EntityDataSource1.WhereParameters.Clear(); 

     if (IDValue.Text.Length > 0) 
     { 
     ControlParameter cp = new ControlParameter(); 
     cp.ControlID = "IDValue"; 
     cp.DbType = System.Data.DbType.Int32; 
     cp.Name = "CompanyId"; 
     cp.PropertyName = "Text"; 
     EntityDataSource1.WhereParameters.Add(cp); 
     } 

     GridView1.DataBind(); 
    } 
    } 
関連する問題