¿Cómo establecer correctamente una tabla de datos en una vista de cuadrícula en código con un ObjectDataSource?

StackOverflow https://stackoverflow.com/questions/269309

Pregunta

Tengo un ObjectDataSource con un ID de ObjectDataSource1 en una página web. También tengo una vista de cuadrícula en la que estoy vinculando el ObjectDataSource.ID al GridView.DataSourceID. El problema que obtengo es que cuando el texto se cambia en un cuadro de texto, el código llama a BrokerageTransactions.GetAllWithDt que devuelve una DataTable. Quiero establecer esta tabla de datos como DataSource para GridView, pero me dice que no puedo configurar DataSouce y DataSourceId juntos. ¿Cómo puedo arreglar esto? El código está abajo. También. ¿Por qué no puede establecer un DataSourceID y un DataSource cuando usa un ObjectDataSource?

Gracias X

protected void BrokerageChange(Object sender, EventArgs e)
{
    BrokerageTransactions brokerageaccountdetails = 
                          new BrokerageTransactions();

    DataSet ds = BrokerageAccount.GetBrkID2(new 
                 Guid(Membership.GetUser().ProviderUserKey.ToString()), 
                 ddlBrokerageDetails.SelectedItem.Text.ToString());

    foreach (DataRow dr in ds.Tables[0].Rows)
    {
        brokerageaccountdetails.BrokerageId = 
                                new Guid(dr["BrkrgId"].ToString());
    }

    ddlBrokerageDetails.SelectedItem.Value = 
                        brokerageaccountdetails.BrokerageId.ToString();

    if (txtTransactionsTo.Text != "" 
        && txtTransactionsFrom.Text != "")
        ObjectDataSource1.FilterExpression = 
        "convert(CreateDt,System.DateTime)>Convert('" + 
         Convert.ToDateTime(txtTransactionsFrom.Text) + "',System.DateTime) 
         and Convert(CreateDt,System.DateTime)<convert('"
         + Convert.ToDateTime(txtTransactionsTo.Text.ToString()) + 
         "',System.DateTime)";
    else if (txtTransactionsFrom.Text != "")
            ObjectDataSource1.FilterExpression =
            "convert(CreateDt,System.DateTime)>convert('" +
             Convert.ToDateTime(txtTransactionsFrom.Text) + 
            "',System.DateTime)";
    else if (txtTransactionsTo.Text != "")
            ObjectDataSource1.FilterExpression = 
            "convert(CreateDt,System.DateTime)
            <convert('" 
            + Convert.ToDateTime(txtTransactionsTo.Text.ToString()) +  
            "',System.DateTime)";
    else
        ObjectDataSource1.FilterExpression = " ";

    grvBrokerage.DataSourceID = ObjectDataSource1.ID;
    grvBrokerage.DataBind();

    DateTime dtTransFrom = Convert.ToDateTime("1/1/1900");
    DateTime dtTransTo = System.DateTime.Today;

    //TransactionsTo Box is Empty
    if ((txtTransactionsFrom.Text.Length > 2) 
    && (txtTransactionsTo.Text.Length < 2)) 
    {
        dtTransFrom = Convert.ToDateTime(txtTransactionsFrom.Text);
        dtTransTo = System.DateTime.Today;
    }

    //TransactionsFrom Box is Empty
    if ((txtTransactionsFrom.Text.Length < 2) 
    && (txtTransactionsTo.Text.Length > 2))
    {
       dtTransFrom = Convert.ToDateTime("1/1/1900");
       dtTransTo = Convert.ToDateTime(txtTransactionsTo.Text);
    }

    //TransactionsFrom Box and TransactionsTo Box is Not Empty
    if ((txtTransactionsFrom.Text.Length > 2) 
    && (txtTransactionsTo.Text.Length > 2))
    {
        dtTransFrom = Convert.ToDateTime(txtTransactionsFrom.Text);
        dtTransTo = Convert.ToDateTime(txtTransactionsTo.Text);
    }
    // Fails Here
    grvBrokerage.DataSource = 
    BrokerageTransactions.GetAllWithDt(brokerageaccountdetails.BrokerageId, 
                                       dtTransFrom, 
                                       dtTransTo);
    grvBrokerage.DataBind();  }
¿Fue útil?

Solución

Tienes 2 opciones:

  • No use ObjectDataSource en todos. Simplemente usa el DataSource propiedad y establecerlo gramaticalmente cada vez.
  • Utiliza la propiedad DataSourceID de GridView y agrega 2 asp simples: Parámetros con el valor predeterminado establecido. En el evento ObjectDataSource_Selecting, establezca estos parámetros a través de e.InputParameters []

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top