在动态添加列时,SelectedIndexChanged期间GridView单元格为空。

时间:2015-09-23 14:26:19

标签: c# asp.net gridview page-lifecycle selectedindexchanged

我正在创建一个GridView包装类,它从数据库中检索某些数据位然后显示它。当选择一行时,我会引发一个其他类将要侦听的事件。我还创建了一个向GridView添加新列的方法,其中包含一些简单的图标。

以下是我的一些代码:

protected override void OnPreRender(EventArgs e)
{
    CreateGridView(); // This creates the gridview and sets it properties
    PopulateGridView(); // This queries the DB and binds the data

    AddIconColumn(gvData.HeaderRow); //Add Icon Column to header
    foreach (GridViewRow row in gvData.Rows)
    {
        AddIconColumn(row); // Add Icon Column to each row
    }
}

protected virtual void AddIconColumn(GridViewRow row)
{
    if (!ShowIcons) return;

    if (row.RowType == DataControlRowType.Header)
    {
        TableHeaderCell HeaderCell = new TableHeaderCell();
        HeaderCell.Text = string.Empty;
        row.Cells.AddAt(index, HeaderCell);
    }

    if (row.RowType == DataControlRowType.DataRow)
    {
        var NewCell = new TableCell();
        var SwitchCell = row.Cells[6] as TableCell;
        NewCell.CssClass = columnValueDictionary[SwitchCell.Text];
        row.Cells.AddAt(index, NewCell);
    }
}

public void gvData_SelectedIndexChanged(object sender, EventArgs e)
{
    GridViewRow row = gvData.SelectedRow; // Get the selected row

    int selectedID; 
    var id = row.Cells[2].Text; // When the icon column is enabled, all the cells are empty at this point !

    if (int.TryParse(id, out selectedObjID))
    {
        if (SelectedIDChanged != null)
        {
            SelectedIDChanged(this, new SelectedIDChangedEventArgs(selectedObjID));
        }
    }
}

当我使用图标添加新列时,GridView的SelectedIndexChanged方法无法从行中检索任何数据。在SelectedIndexChanged事件期间,所有单元格文本都为空。如果我不添加图标行(通过将ShowIcons设置为false),则单元格在SelectedIndexChanged更改事件期间具有正确的文本。

可能导致此行为的原因是什么?

0 个答案:

没有答案