Как правильно настроить таблицу данных для представления сетки в коде с помощью ObjectDataSource?
-
06-07-2019 - |
Вопрос
У меня есть ObjectDataSource с идентификатором ObjectDataSource1 на веб-странице.У меня также есть представление сетки, в котором я привязываю ObjectDataSource.ID к GridView.DataSourceID.Проблема, с которой я сталкиваюсь, заключается в том, что когда текст изменяется в текстовом поле, код вызывает BrokerageTransactions.GetAllWithDt, который возвращает DataTable.Я хочу установить эту таблицу данных в качестве источника данных для 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(); }
Решение
У вас есть 2 варианта:
- Не используйте ObjectDataSource в все.Вы просто используете DataSource свойство и установить его грамматически каждый раз.
- Вы используете свойство DataSourceID GridView и добавляете 2 простых asp:Parameters с установленным значением по умолчанию.В событии ObjectDataSource_Selecting вы устанавливаете эти параметры через e.InputParameters[]
Надеюсь это поможет.
Не связан с StackOverflow