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

Foi útil?

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top