无法访问GridView的其他页面中的TextBoxes

时间:2011-10-03 10:34:13

标签: c# devexpress asp.net-2.0 aspxgridview

我的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 个答案:

答案 0 :(得分:1)

ASPxGridView仅为活动页面创建模板控件。因此,无法通过 FindRowCellTemplateControl 方法获取对不存在控件的引用。

请参阅DX支持中心的http://www.devexpress.com/issue=Q341997讨论,详细了解如何解决此问题。

答案 1 :(得分:0)

无论我对你的问题发表评论,如果我当时得到了你的问题, 你有一个ASPxButton并希望ClickCapacities

中获得所有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
         }
    }
}

我仍然鼓励您通过基础数据源获取数据