2013-06-30 2 views
0

Я использую listBox для отображения результатов поиска. Я хочу, чтобы после поиска значения пользователь выберет значение из результатов поиска, его идентификатор, который является PK (Primaray Key), должен перейти к выбранным результатам, а не к выбранному элементу. enter image description herehttp://i.stack.imgur.com/NaiK0.png Например, в прикрепленном изображении я хочу, чтобы при щелчке пользователем «assign7» его значение id i.e должно перейти в выбранное поле результата. Как мне это сделать. Вам нужно ваше руководство. Спасибо!Как связать первичный ключ выбранного значения из спискаBox?

Вот мой код:

<ListBox Grid.Row="1" SelectionMode="Single" SelectionChanged="PrintText" Background="DarkGray" Visibility="Collapsed" Height="Auto" HorizontalAlignment="Left" Margin="156,36,0,0" Name="listBox1" VerticalAlignment="Top" Width="191" UseLayoutRounding="True" /> 
    <Grid> 
<TextBlock Grid.Row="1" HorizontalAlignment="Left" Margin="12,12,0,0" x:Name="textBlock1" Text="For Search Type here" VerticalAlignment="Top" Height="auto" Width="auto" Foreground="White" /> 
     <TextBox Grid.Row="1" HorizontalAlignment="Left" Margin="156,12,0,246" x:Name="textBox1" Width="191" TextWrapping="NoWrap" TextChanged="textBox1_TextChanged" /> 
     <ListBox Foreground="White" Grid.Row="1" SelectionMode="Single" SelectionChanged="PrintText" Background="DarkGray" Visibility="Collapsed" Height="Auto" HorizontalAlignment="Left" Margin="156,36,0,0" Name="listBox1" VerticalAlignment="Top" Width="191" UseLayoutRounding="True" /> 
     <TextBox Grid.Row="1" Height="16" HorizontalAlignment="Left" Margin="389,0,0,248" x:Name="txtSelectedItem" VerticalAlignment="Bottom" Width="91" Grid.ColumnSpan="2" /> 
    </Grid> 

    private void textBox1_TextChanged(object sender, TextChangedEventArgs e) 
     { 

    string typedstring= textBox1.Text; 
List<string> autolist= new List<string>(); 
foreach(string b in al) 
{ 
if(!string.IsNullOrEmpty(textBox1.Text)) 
{ 
if(b.StartsWith(typedstring)) 
{ 
autolist.Add(b); 
} 
} 
} 
if(autolist.Count>0) 
{ 
    listBox1.ItemsSource = autolist; 
    listBox1.Visibility = Visibility.Visible; 

} 
else if (textBox1.Text.Equals ("")) 
{ 

    listBox1.Visibility = Visibility.Collapsed; 
    listBox1.ItemsSource = null; 
} 

else 
{ 

    listBox1.Visibility = Visibility.Collapsed; 
    listBox1.ItemsSource = null; 
} 


     } 

     private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      selectedItemsId = (int)listBox1.SelectedValue; 
      if (listBox1.ItemsSource != null) 
      { 
       listBox1.Visibility = Visibility.Collapsed; 
       textBox1.TextChanged += new TextChangedEventHandler(textBox1_TextChanged); 
      } 

      if (listBox1.SelectedIndex != -1) 
      { 
       textBox1.Text = listBox1.SelectedItem.ToString(); 
       textBox1.TextChanged += new TextChangedEventHandler(textBox1_TextChanged); 
      } 
     } 
     void PrintText(object sender, SelectionChangedEventArgs args) 
     { 


      Window1 neww = null; 
      neww = new Window1(); 
      neww.Title = selectedItemsId.ToString(); 
      neww.Show(); 
     } 



     private void SetupListBox() 
     { 
      List<Assignment> lst = new List<Assignment>(); 


      listBox1.ItemsSource = lst; 
      //This is what will be displayed 
      listBox1.DisplayMemberPath = "assignment_title"; 
      //This is what will set the selected value to the property you want 
      listBox1.SelectedValuePath = "assignment_id"; 
     } 

ответ

0

Установить путь выбранного значения в поле PK, а затем использовать выбранное значение, чтобы получить текущее значение

class Example 
    { 
     public int id { get; set; } 
     public string Name { get; set; } 
    } 

    private void SetupListBox() 
    { 
     List<Example> lst = new List<Example>(); 
     lst.Add(new Example { id = 1, Name = "First Item" }); 
     lst.Add(new Example { id = 2, Name = "Second Item" }); 
     lst.Add(new Example { id = 3, Name = "Third Item" }); 

     listBox1.ItemsSource = lst; 
     //This is what will be displayed 
     listBox1.DisplayMemberPath = "Name"; 
     //This is what will set the selected value to the property you want 
     listBox1.SelectedValuePath = "id"; 
    } 

    private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     //Get the selected Items id property 
     int selectedItemsId = (int)listBox1.SelectedValue; 
    } 
+0

как настроить путь выбранного значения в поле П.К. ? –

+0

listbox будет иметь свойство selectedValuePath, которое берет строку. Просто дайте ему имя свойства, которое является вашим PK – jfin3204

+0

jfin3204 SelectedValuePath = "{Binding assign_id}" ... как это? –

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