c#
  • asp.net
  • .net
  • sharepoint
  • 2012-10-01 202 views 14 likes 
    14

    Estoy tratando de optimizar el código para SharePoint webpart. Tengo un control del repetidor:HashSet como DataSource

    <asp:Repeater ID="CountryOptionsRepeater" runat="server"> 
        <ItemTemplate> 
         <option value='<%#Eval("CountryName") %>'><%#Eval("CountryName") %></option> 
        </ItemTemplate> 
    </asp:Repeater> 
    

    Estoy llenando con los datos de la tabla

    countriesList = countriesList.Distinct<String>().ToList<String>(); 
    countriesList.Sort(); 
    //var noDupsCountriesList = new HashSet<String>(countriesList); 
    
    DataTable dt = new DataTable(); 
    dt.Columns.Add("CountryName"); 
    
    foreach (String countryName in countriesList) 
    { 
        DataRow dr = dt.NewRow(); 
        dr["CountryName"] = countryName; 
        dt.Rows.Add(dr); 
    } 
    
    CountryOptionsRepeater.DataSource = dt; 
    CountryOptionsRepeater.DataBind(); 
    this.DataBind(); 
    

    ¿Hay una manera de unirse directamente HashSet objeto (noDupsCountriesList) para DataSource con la misma configuración de repetidor, con el fin para lograr la optimización?

    Algo así como:

    //countriesList = countriesList.Distinct<String>().ToList<String>(); 
    //countriesList.Sort(); 
    var noDupsCountriesList = new HashSet<String>(countriesList); 
    
    CountryOptionsRepeater.DataMember = "CountryName"; // ?? 
    CountryOptionsRepeater.DataSource = noDupsCountriesList; 
    CountryOptionsRepeater.DataBind(); 
    this.DataBind(); 
    
    +0

    ¿por qué necesita el DataTable o HashSet? ¿'CountryOptionsRepeater.DataSource = countriesList;' no haría el truco? – paul

    +0

    Podría ser posible hacer el enlace directamente al 'HashSet <>', pero no le dará los países ordenados alfabéticamente, que a partir de su código parece ser necesario. – MiMo

    +1

    @MiMo, gracias Añadiría la instrucción 'OrderBy' (con la suposición de que la' initializaiton + OrderBy' de HashSet está mucho más optimizada que llamando a List <> 'Distinct() + ToList() + Sort() ') .. – Annie

    Respuesta

    6

    creo que esta línea podría reemplazar su segundo bloque de código:

    CountryOptionsRepeater.DataSource = 
        countriesList 
        .Distinct() 
        .OrderBy(c => c) 
        .Select(c => new { CountryName = c }) 
        .ToList(); 
    
    +1

    Se está produciendo un error: No se puede encontrar el nombre de la columna 'CountryName'. ¿Debo usar '' en el archivo ascx (ya que la Lista no tiene el encabezado de la columna)? – Annie

    +1

    El DataMember debe dejarse vacío si se utiliza un tipo primitivo. DataMember está destinado a especificar una propiedad en el tipo. – Shelakel

    Cuestiones relacionadas