2014-09-21 2 views
0

Я хочу автоматически создавать ярлык из базы данных. Для примера. У меня есть таблица [рабочие] со столбцами [id] [name] [sname] и т. Д. Когда я создаю нового работника, я хочу, чтобы приложение создавало новый ярлык с его именем/ярлыком и т. Д.C# WPF Autocreate Label из базы данных

Я попытался привязать ярлык вручную, но это это не главное.

   label1.Text = dt.Rows[0]["Worker_Name"].ToString() 

Да, я знаю его не из wpf.

На последнем этапе я хочу перетащить & падение приложения, где я буду перетащить & падение рабочих (ярлык) на новые разделы, новые learders и т.д., но это будет в будущем :) (простите за мой английский)

ответ

1

EDIT

Решение WPF будет обрабатываться по-разному. Вот как я это сделал. Элемент ItemSource DataGrid будет привязан, а DataContext будет установлен в коде, стоящем рядом с ObservableCollection.

Итак, если вы хотите создать ярлыки для всех записей в своей сетке, вы будете проходить через ObservableCollection и создавать новую метку и задавать свойства из данных в ObservableCollection. Если вы хотите создать ярлык, когда пользователь нажимает на запись в DataGrid, я бы сделал следующее (изменено из какого-либо другого кода!).

XAML

     <DataGridTextColumn Binding="{Binding BackR, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                Header="R" Width="40"/> 

         <DataGridTextColumn Binding="{Binding BackG, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                Header="G" Width="40"/> 

         <DataGridTextColumn Binding="{Binding BackB, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                Header="B" Width="40"/> 

         <DataGridTextColumn Binding="{Binding Tags, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                Header="Tags" Width="90"/> 

        </DataGrid.Columns> 
       </DataGrid> 

В модели

private ObservableCollection<PaletteEntry> _paletteEntries = new ObservableCollection<PaletteEntry>(); 

public ObservableCollection<PaletteEntry> PaletteEntries 
{ 
    get { return _paletteEntries; } 
    set { _paletteEntries = value; OnPropertyChanged("PaletteEntries"); } 
} 

public class PaletteEntry : INotifyPropertyChanged 
    { 
     private string _count; 
     public string Count 
     { 
      get { return _count; } 
      set 
      { 
       _count = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("Count")); 
      } 
     } 

     private string _readOnly; 
     public string ReadOnly 
     { 
      get { return _readOnly; } 
      set 
      { 
       _readOnly = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("ReadOnly")); 
      } 
     } 

     private string _displayPalletteType; 
     public string DisplayPalletteType 
     { 
      get { return _displayPalletteType; } 
      set 
      { 
       _displayPalletteType = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("DisplayPalletteType")); 
      } 
     } 

     private string _title; 
     public string Title 
     { 
      get { return _title; } 
      set 
      { 
       _title = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("Title")); 
      } 
     } 

     private SolidColorBrush _background; 
     public SolidColorBrush Background 
     { 
      get { return _background; } 
      set 
      { 
       _background = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("Background")); 
      } 
     } 

     private string _backname; 
     public string BackName 
     { 
      get { return _backname; } 
      set 
      { 
       _backname = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("BackName")); 
      } 
     } 

     private string _backR; 
     public string BackR 
     { 
      get { return _backR; } 
      set 
      { 
       _backR = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("BackR")); 
      } 
     } 

     private string _backG; 
     public string BackG 
     { 
      get { return _backG; } 
      set 
      { 
       _backG = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("BackG")); 
      } 
     } 

     private string _backB; 
     public string BackB 
     { 
      get { return _backB; } 
      set 
      { 
       _backB = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("BackB")); 
      } 
     } 

     private SolidColorBrush _foreground; 
     public SolidColorBrush Foreground 
     { 
      get { return _foreground; } 
      set 
      { 
       _foreground = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("Foreground")); 
      } 
     } 

     private string _forename; 
     public string ForeName 
     { 
      get { return _forename; } 
      set 
      { 
       _forename = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("ForeName")); 
      } 
     } 

     private string _foreR; 
     public string ForeR 
     { 
      get { return _foreR; } 
      set 
      { 
       _foreR = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("ForeR")); 
      } 
     } 

     private string _foreG; 
     public string ForeG 
     { 
      get { return _foreG; } 
      set 
      { 
       _foreG = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("ForeG")); 
      } 
     } 

     private string _foreB; 
     public string ForeB 
     { 
      get { return _foreB; } 
      set 
      { 
       _foreB = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("ForeB")); 
      } 
     } 

     private string _tags; 
     public string Tags 
     { 
      get { return _tags; } 
      set 
      { 
       _tags = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("Tags")); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     protected void NotifyPropertyChange(string propertyName) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    }; 

в код

WindowsColorPallete.DataContext = null; 
WindowsColorPallete.DataContext = viewModel.PaletteEntries; 

private void WindowsColorPallete_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     if (!WindowsColorPallete.IsReadOnly) 
      return; 

     DependencyObject dep = (DependencyObject)e.OriginalSource; 

     while ((dep != null) && !(dep is DataGridCell) && !(dep is DataGridColumnHeader)) 
     { 
      dep = VisualTreeHelper.GetParent(dep); 
     } 

     if (dep == null) 
      return; 

     if (dep is DataGridCell) 
     { 
      DataGridCell cell = dep as DataGridCell; 

      while ((dep != null) && !(dep is DataGridRow)) 
      { 
       dep = VisualTreeHelper.GetParent(dep); 
      } 

      DataGridRow row = dep as DataGridRow; 

      var ple = (ColorPickerViewModel.PaletteEntry)row.Item; 
      currentPaletteEntry = ple; 

      // HERE AS AN EXAMPLE IS WHERE I WOULD INSTANTIATE A NEW LABEL AND SET THE PROPERTIES 
      // FROM THE ObservableCollection 
      // EG 
      var l = new Label(); 
      l.Content = ple.Title; 

      // ETC :) 

      if (ple.Title != "") 
       TitleValue.Text = ple.Title; 

      if (ple.Tags != "") 
       TagsValue.Text = ple.Tags; 

     } 
    } 

Я думаю, что я понимаю, что вы хотите достичь. Это от старого кода C#, который я написал много лет назад. Я загрузил datagridview с данными, а затем повторил его, создав тем самым метки. Как вы можете видеть, он добавляет новые ярлыки и новый RichTextBox в контейнер, панель и устанавливает данные свойств на основе информации в datagrid. Он также управлял позиционированием.

Надеюсь, я понял, что вы хотели, и это помогает.
Джим

 for (int i = 0; i < dgv_Fields.Rows.Count; i++) 
     { 
      // Add a key field column that has NOT been selected to a column 

      if (Convert.ToBoolean(dgv_Fields.Rows[i].Cells[0].Value) || 
       (Convert.ToInt32(dgv_Fields.Rows[i].Cells["Key#"].Value) > 0 && 
       !Convert.ToBoolean(dgv_Fields.Rows[i].Cells[0].Value))) 
      { 
       dgv_columns.ColumnCount = count + 1; 
       cName = FirstLetterToUpper(dgv_Fields.Rows[i].Cells[1].Value.ToString()); 
       dgv_columns.Columns[count].Name = dgv_Fields.Rows[i].Cells[1].Value.ToString(); 

       if (Convert.ToInt32(dgv_Fields.Rows[i].Cells["Key#"].Value) > 0) 
        dgv_columns.Columns[count].Tag = dgv_Fields.Rows[i].Cells["Key#"].Value; 
       else 
        dgv_columns.Columns[count].Tag = ""; 

       if ((Convert.ToInt32(dgv_Fields.Rows[i].Cells["Key#"].Value) > 0 && 
       !Convert.ToBoolean(dgv_Fields.Rows[i].Cells[0].Value))) 
        dgv_columns.Columns[count].Name = "*" + dgv_Fields.Rows[i].Cells[1].Value.ToString(); 

       tbx = x + 160; 
       label = new Label(); 
       label.Name = "l" + count.ToString(); 
       label.Text = cName.PadRight(25); 
       if ((Convert.ToInt32(dgv_Fields.Rows[i].Cells["Key#"].Value) > 0 && 
       !Convert.ToBoolean(dgv_Fields.Rows[i].Cells[0].Value))) 
        label.Text = "*" + cName.PadRight(25); 
       label.Location = new Point(x, y); 
       label.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold); 
       label.AutoSize = true; 
       panel1.Controls.Add(label); 

       richtextbox = new RichTextBox(); 
       richtextbox.Name = "rtb" + count.ToString(); 
       richtextbox.Location = new Point(tbx + 10, y - 4); 
       richtextbox.Font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold); 
       richtextbox.Size = new Size(100, 35); 
       richtextbox.Tag = count.ToString(); 
       richtextbox.Click += new EventHandler(richtextbox_Click); 
       richtextbox.TextChanged += new EventHandler(richtextbox_TextChanged); 
       panel1.Controls.Add(richtextbox); 

       y += 40; 
       count++; 
      } 
     } 
+0

Спасибо за ответ. Я проверю этот код сегодня вечером, и я тоже отвечу :) В любом случае спасибо за помощь :) – Kafus

+0

Спасибо, что помогли мне.Я думаю, что это то, что я хочу :) Но есть проблема с: (dgv_Fields.Rows [I] .Cells [0] .Value) , потому что это для C#. В WPF я не могу использовать .Rows и .Cells. Я читал где-то, что .Rows = .Items, но даже если это правда, есть .Cells и я не знаю, что я должен делать с этим :( Я думаю, что 'cName' тоже не существует. do? Я могу написать его в C#, но я хочу добавить функции перетаскивания и перетаскивания, и я знаю, что C# для этого плохо. (Я читал об этом где-нибудь) – Kafus

+0

может уделить весь код? есть некоторые переменные, такие как tbx dgv_columns и т. д., что я не может назначить :( – Kafus

Смежные вопросы