كيفية تعيين datatable بشكل صحيح إلى طريقة عرض الشبكة في التعليمات البرمجية باستخدام ObjectDataSource؟

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

سؤال

لدي ObjectDataSource بمعرف ObjectDataSource1 على صفحة ويب.لدي أيضًا عرض شبكي أقوم فيه بربط ObjectDataSource.ID بـ GridView.DataSourceID.المشكلة التي أواجهها هي أنه عندما يتم تغيير النص في مربع نص، يستدعي الكود BrokerageTransactions.GetAllWithDt الذي يقوم بإرجاع DataTable.أرغب في تعيين جدول البيانات هذا باعتباره DataSource لـ GridView، لكنه يخبرني أنه لا يمكنني تعيين DataSouce وDataSourceId معًا.كيف يمكنني اصلاح هذا؟الرمز أدناه.أيضًا.لماذا لا يمكنك تعيين DataSourceID وDataSource عند استخدام ObjectDataSource؟

شكرا 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();  }
هل كانت مفيدة؟

المحلول

لديك خياران:

  • لا تستخدم ObjectDataSource على الإطلاق.يمكنك فقط استخدام خاصية DataSource وتعيينها نحويًا في كل مرة.
  • يمكنك استخدام خاصية DataSourceID الخاصة بـ GridView وإضافة 2 asp عادي: معلمات مع مجموعة القيمة الافتراضية.في حدث ObjectDataSource_Selecting، يمكنك تعيين هذه المعلمات من خلال e.InputParameters[]

أتمنى أن يساعدك هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top