Вопрос

В веб -части SharePoint я отображаю SpgridView. Управление SPGRIDVIEW находится внутри Ajax UpdatePanel и связан с данным в коде.

Столбцы для Gridview созданы в основном в качестве шаблонов, есть только одно граничное поле. Я создал класс, который наследует Itemplate, который производит ItemTemplate для шаблона. Этот класс также обрабатывает основание данных элементов управления по столбцам/данным в данных DataTable.

У меня есть кнопка за пределами сетки, которая при нажатии предназначена для сохранения изменений, сделанных в данные в Gridview, в базу данных DataTable и Boundsing.

Проблема в том, что я не могу получить ссылку на элементы управления в рамках события кнопок «OnClick», я итерации через строки в GridView и используя следующий код для получения ссылки на элемент управления:

foreach (SPGridViewRow row in grid.Rows)
        {
            TextBox txtExamMark = (TextBox)row.FindControl("txtExamMark");

Вышеуказанное всегда ноль, а актерский состав не работает. Кто -нибудь может пролить свет на это? Я предполагаю, что это какая -то проблема ViewState, но я не уверен.

Я опубликовал еще несколько образцов кода ниже.

Спасибо,

Алекс

 public class CustomSPGridViewTemplate : ITemplate
{
    string columnName;
    string controlType;

    int controlWidth;

    ListItemCollection itemColl;

    string txtMode;

    public CustomSPGridViewTemplate(string ctype,string colname,ListItemCollection itemcol,string mode,int cWidth)
    {
        columnName = colname;
        controlType = ctype;
        itemColl = itemcol;
        controlWidth = cWidth;
        txtMode = mode;
    }

    public void InstantiateIn(System.Web.UI.Control container)
    {
        if (controlType == "TextBox")
        {
            TextBox txtBox = new TextBox();
            txtBox.ID = "txt" + columnName;
            txtBox.Visible = true;
            txtBox.Width = Unit.Pixel(controlWidth);
            txtBox.DataBinding += new EventHandler(txtBox_DataBinding);
            if (txtMode == "MultiLine")
            {
                txtBox.TextMode = TextBoxMode.MultiLine;
            }
            container.Controls.Add(txtBox);
        }
        if (controlType == "PupilImage")
        {
            Image pupilImage = new Image();
            pupilImage.ID = "pupilImage";
            pupilImage.Visible = true;
            pupilImage.DataBinding += new EventHandler(pupilImage_DataBinding);
            container.Controls.Add(pupilImage);
        }
        if (controlType == "DropDown")
        {
            DropDownList dropDown = new DropDownList();
            dropDown.ID = "ddl" + columnName;
            dropDown.Visible = true;             
            dropDown.DataBinding += new EventHandler(dropDown_DataBinding);
            container.Controls.Add(dropDown);
        }
    }

    void txtBox_DataBinding(object sender, EventArgs e)
    {
        TextBox txtBox = (TextBox)sender;
        SPGridViewRow container = (SPGridViewRow)txtBox.NamingContainer;
        txtBox.Text = DataBinder.Eval(container.DataItem, columnName).ToString();

    }
Это было полезно?

Решение 2

Спасибо за ответы - в конце концов я нашел проблему.

Я переиздал колонны сетки в методе CreateChildControls, а также снова настраивал их в выборочном событии раскрывающегося списка.

Первоначально причина этого заключается в том, что к ней добавлены разные столбцы в зависимости от значения, выбранного в выпадении, но это не известно в событии CreateChildControls.

Настройка сетки, подобная этой дважды, заставила элементы управления каким -то образом исчезнуть из коллекции «Управление страницами», поэтому, когда я пытался отбрасывать их обратно, я всегда получал нуль.

Теперь я не настраиваю колонны сетки дважды, и это отлично работает - спасибо за вашу помощь!

Другие советы

Вы должны проверить тип DataRow, так как первая строка, наверное, будет строка заголовка, которую вы можете сделать, используя строку DataRow.

Некоторое время назад у нас была похожая проблема, кроме того, что подход к брошению на контроль - тот же подход, который я использовал во многих случаях.

Дайте мне знать, как вы поживаете.

С уважением Саймона

Я видел, как Spgridview ведут себя странно после отправков в одной из моих пользовательских веб -частей, например, рендеринговых рядов, но не рендеринг содержимого для ячеек в этих рядах.

Вы можете временно переписать его, чтобы просто использовать .NET GRIDVIEW вместо SPGRIDVIEW, и посмотреть, имеет ли это какое -либо значение. Если это также терпит неудачу, то, вероятно, где -то в вашем коде есть какая -то ошибка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top