Как вы удаляете WhereParameters в EntityDataSource? - PullRequest
1 голос
/ 29 июня 2011

У меня есть простой GridView с 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();

Кажется, не очищает параметры Where, хотя отладчик говорит, что Count равен 0.

Ответы [ 2 ]

1 голос
/ 29 июня 2011

Попробуйте позвонить GridView1.DataBind() после кода в Page_Load. Событие Init запускается для элементов управления в первую очередь и для последней страницы, поэтому, возможно, оно связывается перед вашим исходным обработчиком события init страницы.

НТН.

0 голосов
/ 02 июля 2011

Это работает! Новый код позади:

  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();
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...