Ошибка приведения при привязке вложенного вида сетки к виду сетки, привязанному к результату данных linq - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть родительское сеточное представление (UserTransactionGridView), которое я связываю с выходными данными этого запроса linq, для которого выходные данные выглядят так: http://postimage.org/image/1vtpbagck/:

        var recordList = (from CustomersRecord custsRecord in customerRecordContainer orderby custsRecord.DateOfTransaction descending group custsRecord 
                          by new {custsRecord.InvoiceNumber, custsRecord.DateOfTransaction} into intermediateResult 
                          select new {InvoiceNumber = intermediateResult.Key.InvoiceNumber, DateOfTransaction = intermediateResult.Key.DateOfTransaction, TotalAmount = intermediateResult.Sum(custsRecord => custsRecord.TotalAmount)}).ToList();
        UserTransactionGridView.DataSource = recordList;
        UserTransactionGridView.DataBind();  

и теперь, когда данныепривязываясь к каждой строке в родительском представлении сетки, я создаю дочернее представление сетки (gridview2) в зависимости от номера счета каждой строки.Я имею в виду, что в зависимости от номера счета в каждой строке я выбираю названия программ из базы данных и таким образом привязываю их к представлению дочерней сетки.Мое намерение состоит в том, чтобы получить такой результат: http://postimage.org/image/2lri4f544/. И я делаю следующее, чтобы добиться этого:

 protected void UserTransactionGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            GridView gridView2 = (GridView)e.Row.FindControl("gridView2");
            System.Data.DataRowView dr = (System.Data.DataRowView)e.Row.DataItem;
            gridView2.AutoGenerateColumns = true;
            String x = dr[1].ToString();
            softwareTitlesList = SoftwareListRetrieve();
            ArrayList titles = new ArrayList();
            foreach (SoftwareTitles softwareTitle in softwareTitlesList)
            {
                if (softwareTitle.InvoiceNumber.Contains(x))
                    titles.Add(softwareTitle.SoftwareTitle);
            }
            gridView2.DataSource = titles;
            gridView2.DataBind();
            softwareTitlesList.Clear();
        }
    }

Но я получаю сообщение об ошибке следующим образом:

Unable to cast object of type '<>f__AnonymousType3`3[System.String,System.DateTime,System.Decimal]' to type 'System.Data.DataRowView'.

1 Ответ

1 голос
/ 20 апреля 2011

Вы пытаетесь конвертировать e.Row.DateItem в DataRowView, что, я думаю, не сработает. Попробуйте этот пример для справки. В последнем куске кода в этом посте делается то же самое.

...