Rad Grid не выбирает Row On Row Select

У меня есть Rad Grid, к которому я привязываю источник данных при загрузке страницы. Я пытаюсь затем захватить строку, которая выбирается, когда пользователь щелкает строку. Я успешно сделал это с помощью Rad Grid с источником данных, установленным в разметке. Возможно ли это сделать с помощью сетки с динамически установленным источником данных.

наценка

 <telerik:RadGrid ID="rgTable" runat="server" OnSelectedIndexChanged="rgTable_OnSelectedIndexChanged">
        <ClientSettings EnableRowHoverStyle="true" EnablePostBackOnRowClick="true">
            <Selecting AllowRowSelect="true" />
        </ClientSettings>
    </telerik:RadGrid>

C#

 protected void Page_Load(object sender, EventArgs e)
    {
        int id = Convert.ToInt32(Request.QueryString["ID"]);
        ConnString = Connections.Search(0, 999999, null, null, null, id, null, null, null, null, null)[0].Connection_String;

        StoreTableAndViewNames();//This method sets arrTables with ArrayList
        rgTable.DataSource = arrTables;
        rgTable.DataBind();
    }

    protected void rgTable_OnSelectedIndexChanged(object sender, EventArgs e) 
    {
        try
        {
            if (rgTable.SelectedItems.Count > 0)//This test is failing
            {
                GridDataItem item = (GridDataItem)rgTable.SelectedItems[0];
                string table = item.Cells[0].ToString();

                StoreColumnNames(table);
                rgColumn.DataSource = arrColumns;
                rgColumn.DataBind();
            }

        }
        catch (Exception ex)
        {
            errorlbl.Text = ex.ToString();
        }
    }

1 ответ

Решение

В вашем коде данные связываются с rgTable при каждой загрузке страницы.

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

Быстрые исправления - это не привязывать rgTable к посту обратно.

protected void Page_Load(object sender, EventArgs e)
{
  ....
  if (!IsPostBack)
  {
    rgTable.DataSource = arrTables;
    rgTable.DataBind();
  }
}

Однако предпочтительным методом является использование события NeedDataSource.

Если вы связываете данные в NeedDataSource В этом случае RadGrid знает, когда и где искать данные, если они необходимы.

protected void rgTable_OnNeedDataSource(object sender, 
   GridNeedDataSourceEventArgs e)
{
   rgTable.DataSource = arrTables;   
}
Другие вопросы по тегам