Проблема с привязкой данных LINQ к GridView и RowDataBound - PullRequest
2 голосов
/ 06 февраля 2010

Привет всем,

Я работаю над редизайном своего личного веб-сайта с использованием VS 2008 и решил использовать LINQ для создания слоя доступа к данным. Часть моего сайта будет небольшим приложением, которое поможет лучше управлять моим бюджетом. Мой первый запрос LINQ успешно выполняется и отображается в GridView, но когда я пытаюсь использовать событие RowDataBound для работы с результатами и немного их уточнить, я получаю сообщение об ошибке:

Не удалось найти тип или имя пространства имен 'var' (отсутствует директива using или ссылка на сборку?)

Эта интересная часть заключается в том, что, если я просто попытаюсь вставить var s = "s"; в другом месте того же файла, я получу ту же ошибку. Если я перейду к другим файлам в веб-проекте, var s = "s"; скомпилируется нормально.

Вот вызов LINQ Query:

public static IQueryable pubGetRecentTransactions(int param_accountid)
{
    clsDataContext db;

    db = new clsDataContext();

    var query = from d in db.tblMoneyTransactions
                join p in db.tblMoneyTransactions on d.iParentTransID equals p.iTransID into dp
                from p in dp.DefaultIfEmpty()
                where d.iAccountID == param_accountid
                orderby d.dtTransDate descending, d.iTransID ascending
                select new
                {
                    d.iTransID,
                    d.dtTransDate,
                    sTransDesc = p != null ? p.sTransDesc : d.sTransDesc,
                    d.sTransMemo,
                    d.mTransAmt,
                    d.iCheckNum,
                    d.iParentTransID,
                    d.iReconciled,
                    d.bIsTransfer
                };

    return query;
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        this.prvLoadData();
    }
}

internal void prvLoadData()
{
    prvCtlGridTransactions.DataSource = clsMoneyTransactions.pubGetRecentTransactions(2);

    prvCtlGridTransactions.DataBind();
}


protected void prvCtlGridTransactions_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var datarow = e.Row.DataItem;
        var s = "s";

        e.Row.Cells[0].Text = datarow.dtTransDate.ToShortDateString();
        e.Row.Cells[1].Text = datarow.sTransDesc;
        e.Row.Cells[2].Text = datarow.mTransAmt.ToString("c");
        e.Row.Cells[3].Text = datarow.iReconciled.ToString();
    }//end if
}//end RowDataBound

Мой поиск в Google на сегодняшний день не нашел хорошего ответа, поэтому я передаю его этому доверенному сообществу. Я ценю ваше время, помогая мне.

1 Ответ

0 голосов
/ 06 февраля 2010

Мне кажется довольно странным, var - это ключевое слово языка, но каким-то образом компилятор воспринимает его как тип в этом случае. Поскольку вы (успешно) использовали var в pubGetRecentTransactions(), я предполагаю, что вы компилируете под .NET 3.5, верно?

VS иногда делает очень странные вещи. Вы пытались перезапустить VS и потом полностью перестроить`?

...