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;
}