2016-09-05 2 views
-1

У меня есть проект с несколькими формами окон, каждый из которых используется для редактирования записей разных таблиц базы данных. Некоторые из этих таблиц базы данных имеют столбец с именем mycolumn, который до сих пор не использовался в реализации проекта.Компоненты пустых форм в закладке во время выполнения

Для таблиц базы данных, которые имеют столбец mycolumn, я хотел бы добавить элемент управления вкладкой в ​​форму окна, соответствующую таблице базы данных. Я хотел бы сделать это программно, во время выполнения.

Я нашел несколько ответов на Stackoverflow, которые позволяют добавить элемент управления вкладкой (во время выполнения) в форму, в которой уже есть одна вкладка. К сожалению, это не работает для меня, потому что у всех форм пока нет вкладок. Такой вызов, как tabControl.Controls.Add(tabpagename), не работает, потому что у меня пока нет tabControl.

Таким образом, я ищу способ программно создать элемент управления вкладкой и поместить все существующие компоненты формы в первую вкладку, чтобы я мог использовать это, чтобы добавить вкладки в элемент управления вкладки в будущем.

Псевдо код выглядит следующим образом:

form1constructor() { 
     InitializeComponent(); 

     if (TableHasColumn("mycolumn")) { 
      PutAllExistingComponentsInTabControl(); // Don't know how to do this 
      AddTabControlWithName("myColumn"); // DO know how to do this, not part of the question 

    } 

Как мне это сделать?

ответ

0

Вот пример, который я сделал для вас,

List<string> tableNames; // for table Names 
string columnName = "TestName"; // your ColumnName 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      SqlConnection cnn = new SqlConnection("Server=.;Database=dbName;Trusted_Connection=True;"); // connection string 
      cnn.Open(); 
      tableNames = cnn.GetSchema("Tables").AsEnumerable().Select(x=> x[2].ToString()).ToList(); // get all table Names and put them into string List. 
      SqlDataAdapter adp; 
      DataTable dt; 
      foreach (var item in tableNames) // loop in names 
      { dt = new DataTable(); 
       adp = new SqlDataAdapter("Select * from dbo.[" + item + "]", cnn); 
       adp.Fill(dt); 
       if (dt.Columns.Contains(columnName)) // check columnName in loop 
       { 
        TabPage tb = new TabPage(); //If we had a match then we need a tabpage 
        tb.Text = columnName; // Named with columnName 
        tabControl1.TabPages.Add(tb); // Add to TabControl 
        PutControls(tb); // Then call our method to add components 
       } 
      } 
     } 

метод для вызова компонентов,

public void PutControls(TabPage tb) { 
      Button btn = new Button(); 
      btn.Text = "testButton"; 
      btn.Height = 20; 
      btn.Width = 150; 
      btn.Location = new Point(4, 26); 
      TextBox txt = new TextBox(); 
      txt.Text = "test"; 
      txt.Location =new Point(34, 126); 
      tb.Controls.Add(btn); 
      tb.Controls.Add(txt); 
     } 

результат; enter image description here Пытался объяснить с комментариями,

Update 1

Так что я предполагаю, что вы не должны петли в таблицах, нужно просто создать TabControl и поместить все элементы управления в новой вкладке ,

должно быть, как это то,

string columnName = "TestName"; // your ColumnName 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      SqlConnection cnn = new SqlConnection("Server=.;Database=db;Trusted_Connection=True;"); // connection string 
      cnn.Open(); 
      SqlDataAdapter adp; 
      DataTable dt; 
      string tableName = "tableNane"; 
      dt = new DataTable(); 
      adp = new SqlDataAdapter("Select * from " + tableName, cnn); 
      adp.Fill(dt); 
      if (dt.Columns.Contains(columnName)) 
      { 
       TabControl tbControl = new TabControl(); 
       tbControl.Height = 100; 
       tbControl.Width = 200; 
       tbControl.Name = columnName; 
       this.Controls.Add(tbControl); 
       TabPage tb = new TabPage(); 
       tb.Text = columnName; 
       tbControl.TabPages.Add(tb); 
       PutControls(tb); // the method defined at the top of the answer. 
      } 


     } 

Надежда помогает,

+0

Спасибо, Беркай! К сожалению, этот ответ не работает для меня. В вопросе я заявил, что все формы в моем приложении еще не имеют вкладок. Чтобы сделать это конкретным: я пока не могу добавить вкладки в tabcontrol только обычным способом, потому что у меня еще нет элемента управления табуляцией. Я отредактирую вопрос, чтобы сделать его более ясным. – tedvangageldonk

+0

@tedvangageldonk Проверьте обновленный ответ, пожалуйста. – Berkay

+0

Это отчасти сработало, но тем временем я решил пойти на другой дизайн. В любом случае, спасибо, потому что он сделал несколько понятных вещей! – tedvangageldonk