none
Заполнение ячеек в SPGridView RRS feed

  • Вопрос

  • Подскажите плз почему не заполняются ячейки, которые я пытаюсь заполнить вручную. Ситуация следующая:

    Есть данные в библиотеке. Предварительно в форме есть таблица из трех столбцов. Автоматическая привязка данных нормально выводит данные в эти столбцы.

    Я добавляю столбец с названием Статус и пытаюсь зоплнить все ячейки этого столбца словами "В отпуске". В данном случае у меня столбец добавляется и показывается, но данные в ячейку не заносятся. Что я еще не доделываю?

    Ниже приведен код:

     

            protected void Click_LinkButton3(object sender, EventArgs e)
            {
    //            string st = "";
                SPGridView1.DataSource = null;
                SPGridView1.DataBind();
                DataContext teamSite = new DataContext(SPContext.Current.Web.Url);
                EntityList<OtpuskItem> OtpuskUser = teamSite.GetList<OtpuskItem>("otpusk");
                var uslst = from Otp in OtpuskUser
                            where ((Otp.Status.ToString() == "ВОтпуске") && (Otp.Ut1 == true) && (Otp.Ut2 == true))
                            select new
                            {
                                Otp.Title,
                                Otp.S,
                                Otp.Po,
                                Otp.Id
                            };
                int num = uslst.AsQueryable().Count();      // Количество возвращенных строк
    
                SPGridView1.DataSource = uslst;
    
                SPBoundField bf;
                bf = new SPBoundField();
    //            bf.DataField = "В отпуске";
                bf.HeaderText = "Статус";
    
    
    
                SPGridView1.Columns.Add(bf);
    
                for (int i = 1; i <= num; i++)
                {
    
                    SPGridView1.Rows[i].Cells[3].Text = "В отпуске";
                }
    
                SPGridView1.DataBind();
                Label1.Text = "Я процедуре 3. NUM = " + num;
    
    
            }

    • Изменено HRM 19 января 2012 г. 7:42
    19 января 2012 г. 7:40

Ответы

Все ответы

  • Попробуйте убрать последний  SPGridView1.DataBind(); По идее он делает заново биндинг uslst и перетирает изменения, которые заносятся Вашим циклом
    19 января 2012 г. 9:27
  • Да, забыл отметить еще одну проблему.

    Когда вставлен этот цикл,

     for (int i = 1; i <= num; i++)
                {
    
                    SPGridView1.Rows[i].Cells[3].Text = "В отпуске";
                }
    
    

    то вылетает по ошибке:

    Index was out of range. Must be non-negative and less than the size of the collection.
    Parameter name: index

    ----------------------------------------------------------------------------------------

    Без этого цикла все работает, но естественно - пустые ячейки.

    Помогите плз разобраться в первую очередь с индексом.

    19 января 2012 г. 9:54
  • Думаю, что должно быть так

     for (int i = 0; i < num; i++)
                {
    
                    SPGridView1.Rows[i].Cells[3].Text = "В отпуске";
                }
    

    19 января 2012 г. 9:59
  • Не помогло.
    19 января 2012 г. 10:28
  • А колонок в гриде после добавления статуса сколько становится. 4?
    19 января 2012 г. 10:30
  • Да, колонок становится 4. Появляется название колонки. Но как только вставляешь цикл, программа вылетает по ошибке. Это web-парт в SharePoint 2010.
    19 января 2012 г. 10:37
  • Cells[i] это контейнер, который может содержать дочерние контролы.

    Попробуйте к ячейке обратиться так: ((TextBox)SPGridView1.Rows[i].Cell[3].Controls[0]).Text

    extracting data from a SpGridView selected row

    spgridview RowDataBound event returning cell values as empty



    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    • Изменено Roman Zhukov 25 января 2012 г. 13:10 опечатка
    • Предложено в качестве ответа Roman Zhukov 10 февраля 2012 г. 13:22
    • Помечено в качестве ответа Vinokurov Yuriy 10 февраля 2012 г. 13:34
    25 января 2012 г. 11:24
  • Попробовал. И получил следующую ошибку:

    -----------------------------------------------------------------------------

    Error 6 'Microsoft.SharePoint.WebControls.SPGridView' does not contain a definition for 'Row' and no extension method 'Row' accepting a first argument of type 'Microsoft.SharePoint.WebControls.SPGridView' could be found (are you missing a using directive or an assembly reference?) D:\SharePointProjects\ListIssue\ListIssue\VisualWebPart1\VisualWebPart1UserControl.ascx.cs 140 43 ListIssue
    ---------------------------------------------------------------------------------

    Насколько я понял, в этом контроле нет метода Row. По описанию класса таконо метода действительно нет.

    Без ошибок проходит следующая конструкция ((TextBox)SPGridView1.Rows[i].Cells[3].Controls[0]).Text

    Но ячейка остается пустой.

    Следующее выражение str = ((TextBox)SPGridView1.Rows[i].Cells[1].Controls[0]).Text; показывает, что переменная str остается пустой, хотя в ячейке есть строковое значение.
    • Изменено HRM 25 января 2012 г. 12:48
    25 января 2012 г. 12:17
  • По поводу Row опечатка, имел в виду Rows.

    Просмотрите все дочерние контролы контейнера Cells[i], возможно нужно приводить не к TextBox, а к Label.


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
    25 января 2012 г. 13:16