Не удается получить доступ к текстовым полям на других страницах GridView - PullRequest
0 голосов
/ 03 октября 2011

У меня есть ASPxGridView с колонкой, связывающейся ASPxTextBox

<dx:GridViewDataTextColumn Caption="Capacity" FieldName="Capacity" VisibleIndex="4" >
    <DataItemTemplate>
        <dxe:ASPxTextBox ID="txtCapacity" runat="server" Text='<%# Eval("Capacity") %>'>
        </dxe:ASPxTextBox>
    </DataItemTemplate>
</dx:GridViewDataTextColumn>

Я добавил кнопку для сохранения емкости.

Я использую GetRowValues(index, field_name) для доступа к другим полям и FindRowCellTemplateControl(index, column, id), чтобы иметь возможность получить значение txtCapacity. Но проблема в том, что при включении подкачки я не могу получить доступ к текстовым полям на других страницах.

Есть идеи по этому поводу? Спасибо

РЕДАКТИРОВАТЬ v.1

Вот мой код, к которому я обращаюсь FindRowCellTemplateControl()

protected void btnSave_Click(object sender, EventArgs e)
{
    List<Capacity> capacityList = new List<Capacity>();

    for (int i = 0; gvCapacity.VisibleRowCount > i; i++)
    {
        Capacity c = new Capacity();
        c.Id = (int)gvCapacity.GetRowValues(i, "Id");

        ASPxTextBox txtCapacity = (ASPxTextBox)gvCapacity.FindRowCellTemplateControl(i, (GridViewDataColumn)gvCapacity.Columns["Capacity"], "txtCapacity");
        c.Value = Convert.ToInt32(txtCapacity.Text);

        capacityList.Add(c);
    }

    //Save Capacity
    //...
}

Ответы [ 2 ]

1 голос
/ 03 октября 2011

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

См. Обсуждение http://www.devexpress.com/issue=Q341997 в центре поддержки DX, чтобы узнать больше окак решить эту проблему.

0 голосов
/ 03 октября 2011

Независимо от моего комментария на ваш вопрос, и если я правильно понял ваш вопрос, у вас есть ASPxButton, и вы хотите, когда Click, чтобы получить все Capacities внутри вашего ASPxGridView

попробуйте это:

protected void ASPxButton1_Click(object sender, EventArgs e)
{
    //Loop throug all Pages
    for (int i = 0; i < ASPxGridView1.PageCount; i++)
    {
        //Select current page
        ASPxGridView1.PageIndex = i;

        //Loop through all rows inisde the page
        for (int J = 0; J < ASPxGridView1.SettingsPager.PageSize; J++)
        {
             //Get currnt TextBox
             DevExpress.Web.ASPxEditors.ASPxTextBox txtbox = 
             ASPxGridView1.FindRowCellTemplateControl(J,
             (DevExpress.Web.ASPxGridView.GridViewDataColumn)ASPxGridView1.Columns["Capacitiy"],
             "txtCapacity") as DevExpress.Web.ASPxEditors.ASPxTextBox;

             //Do your logic here
         }
    }
}

Я по-прежнему призываю вас получать данные через базовый источник данных

...