2013-06-10 7 views
1

Je crée une page ASP.NET wep. J'ai une carte du monde et je veux ajouter quelques commandes de boutons d'image (villes) en C#. J'ai fait la méthode:Ajout de contrôles par programme

J'utilise la procédure stockée pour obtenir des données de la base de données mais quand j'ajoute la prochaine ville à la procédure, le bouton image précédemment ajouté change sa position.

private void LocateCities() 
{ 
IDBManager dbManager = new DBManager(DataProvider.SqlServer); 
dbManager.ConnectionString = @"Data Source=server; Initial Catalog=db; Integrated Security = SSPI;"; 
try 
{ 
    dbManager.Open(); 
    dbManager.CreateParameters(2); 
    dbManager.AddParameters(0, "@Function", "All"); 
    dbManager.AddParameters(1, "@Team", "All"); 
    DataSet ds = new DataSet("Stuff"); 
    ds = dbManager.ExecuteDataSet(CommandType.StoredProcedure, "sp_select_staff_and_cities");      

    foreach (DataRow dr in ds.Tables[0].Rows) 
    { 
     int xaxis = Convert.ToInt32(dr["xaxis"]) ; 
     int yaxis = Convert.ToInt32(dr["yaxis"]) ; 
     int textxaxis = xaxis + 30; 
     int textyaxis = yaxis - 10; 

     ImageButton btnCity = new ImageButton(); 
     btnCity.ImageUrl = "~/Images/cyanball1.gif"; 
     btnCity.Height = 10; 
     btnCity.Attributes.Add("style", "Z-INDEX:100; POSITION:relative; left:" + xaxis + "px; TOP:" + yaxis + "px; Left:10px;Right:10px"); 

     Label lblCity = new Label(); 
     lblCity.Text = dr["city"].ToString(); 
     lblCity.Attributes.Add("style", "Z-INDEX: 100;POSITION:relative; left:" + textxaxis + "px; TOP:" + textyaxis + "px"); 

     PanelMap.Controls.Add(lblCity); 
     PanelMap.Controls.Add(btnCity);  
    } 
} 
catch (Exception ex) 
{ 
    Response.Write(ex.ToString()); 
} 
finally 
{ 
    dbManager.Dispose(); 
} 
} 

J'utilise panneau pour garder l'image sur la carte: .PanelMap { largeur: 960px; hauteur: 572px; text-align: à gauche; }

Ce qui devrait être changé dans le code ci-dessus pour garder les points à sa place?

J'ai essayé d'utiliser la position: absolu mais cela cause que la posiotion est dérivée par rapport à la page et j'aimerais qu'elle soit dérivée relativement au contrôle du panneau.

+0

Vous pouvez envelopper vos boutons d'image et étiqueter dans un div html. Débarrassez-vous de la hauteur et du positionnement et il devrait juste couler pendant que vous ajoutez des éléments. – Jay

+0

Jay, pourriez-vous s'il vous plaît être plus précis? Merci d'avance. – ironcurtain

+0

Fondamentalement, supprimez vos attributs de style, supprimez la spécification de hauteur sur votre panneau et utilisez 'System.Web.UI.HtmlControls.HtmlGenericControl (" div ")' comme un wrapper à votre étiquette et le bouton – Jay

Répondre

1

Le problème serait ceci, POSITION:relative, alors changez cela en POSITION:absolute sur les deux lignes et vous serez bon.

+0

J'ai utilisé POSITION: absolu bien que je voulais faire éviter cela. Thaks. – ironcurtain

+0

@ user2027004, merci et je suis heureux de pouvoir vous aider. S'il vous plaît envisager d'upvoting et en le marquant comme la réponse. –

+0

J'ai un autre problème - quand j'utilise une posiotion absolue et que j'ai des formes cachées, ça ne marche pas les unes avec les autres parce que quand les formes cachées apparaissent, les boutons images ne sont pas au bon endroit. Y a-t-il un moyen de réparer ce problème? – ironcurtain

Questions connexes