Acessando Row Data In Telerik RadGrid (Servidor Side)
Pergunta
Ive há problemas usando JavaScript para ler as linhas de uma telerik RadGrid im componente usando porém eu consigo encontrar qualquer maneira para o acesso do lado do servidor de dados da linha quando ocorre um postback. Ive idades gasto à procura de solução, mas sem sorte. Os ponteiros seria muito apreciada.
Tony
Solução
Você pode querer olhar para o DataKeyValues propriedade do objeto OwnerTableView, que lhe permitirá aceder a um conjunto de valores que representam os campos em uma determinada linha. Eu usá-lo durante o manipulador de eventos EditCommand, uma vez que um usuário do meu site é direcionado para uma página de edição se clicar no link para editar uma linha na grade, e eu preciso passar ao longo de determinada informação sobre a linha dada na consulta string.
Se isto acaba por ser o que você precisa, você também precisa definir quais campos devem ser disponibilizados através desta propriedade. Para fazer isso, olhar para a propriedade MasterTableView.DataKeyNames na folha de propriedades para a grade. Você basicamente especificar uma lista delimitada por vírgulas de nomes de campo.
Outras dicas
Eu uso a grade Telerik de algum tempo e encontrei estes artigos em seus docs sobre como buscar dados de servidor de filas selecionado ou do lado do cliente:
do lado do servidor do lado do cliente
Espero que você vai encontrá-los úteis.
Dick
A do lado do servidor é a parte fácil:
GridItemCollection gridRows = TestGrid.Items;
foreach (GridDataItem data in gridRows)
{
ItemClass obj = (ItemClass)data.DataItem;
}
É a parte do lado do cliente que eu não sei! : [
private Int32 GetID()
{
foreach (Telerik.Web.UI.GridDataItem dataItem in radGrid.MasterTableView.Items)
{
if (dataItem.Selected == true)
{
Int32 ID = (Int32)dataItem.GetDataKeyValue("ID");
return ID;
}
}
throw new ArgumentNullException("Id Not found");
}
private Int32 GetID()
{
foreach (Telerik.Web.UI.GridDataItem dataItem in radGrid.MasterTableView.Items)
{
if (dataItem.Selected == true)
{
// Int32 ID = (Int32)dataItem.GetDataKeyValue("ID");
Int32 ID =Convert.ToInt32(dataItem.GetDataKeyValue("ID"));
return ID;
}
}
}
//this will work
Esta é a única que funciona para mim e usa a coleção RadGrid.SelectedItems.
protected void LinkButton1_Click(object sender, EventArgs e)
{
List<Guid> OrderIdList = new List<Guid>();
foreach (GridDataItem OrderItem in this.RadGrid1.SelectedItems)
{
OrderIdList.Add(new Guid(OrderItem.GetDataKeyValue("OrderId").ToString()));
}
}
Se você criou corretamente seus controles na marcação ou na página de inicialização para controles dinâmicos, então o RadGrid irá restaurar corretamente estado.
Você pode acessar os valores iniciais que foram carregados a partir da fonte de dados como este exemplo abaixo, desde que você disse à vista de tabela em questão para manter as colunas em torno as teclas de dados.
protected T GetInitialGridData<T>(GridDataItem item, string uniqueColumnName) {
item.ThrowIfNull("item");
uniqueColumnName.ThrowIfNullOrEmpty("uniqueColumnName");
return (T)item.OwnerTableView.DataKeyValues(gridItem.ItemIndex)(columnName);
}
Se você estiver usando uma coluna de modelo personalizado dinâmica, e necessidade de chegar a todos os valores que agora pode estar em seus estados, você pode usar:
protected string GetCustomTextBoxValue(GridDataItem item, string controlID) {
item.ThrowIfNull("item");
controlID.ThrowIfNullOrTrimmedEmpty("controlID");
return ((TextBox)item.FindControl(controlID)).Text;
}