2013-07-31 2 views
0

WPF를 처음 사용하는 경우. 이미지 이름을 콤보 상자에서 선택하면 양식에 이미지를 표시하려고합니다 (이미지는 콤보로 채워지는 SQL 데이터베이스에 저장 됨).이미지 이름을 선택하면 양식에 이미지가 표시됩니다.

누구든지이 작업을 수행 할 수있는 방법에 대해 알고 있습니까? 콤보에서 선택할 때 텍스트 상자를 채우는 코드를 추가했습니다.

private void comboBoxDisplay_SelectionChanged(object sender, SelectionChangedEventArgs e) 

    { 
     string constring = "Data Source=tcp:****;Initial Catalog=******;Persist Security Info=True;User ID=*******;Password=******"; 

     string Query = "select * from tables where Name='" + comboBoxDisplay.SelectedItem.ToString() + "' ;"; 
     SqlConnection conDataBase = new SqlConnection(constring); 
     SqlCommand cmdDataBase = new SqlCommand(Query, conDataBase); 
     SqlDataReader myReader; 

     try 
     { 
      conDataBase.Open(); 
      myReader = cmdDataBase.ExecuteReader(); 

      while (myReader.Read()) 
      { 

       string sReid = myReader.GetInt32(0).ToString(); 
       string sName = myReader.GetString(1); 
       string sPicture = myReader.GetString(3); 

       txtReId.Text = sReid; 
       txtName.Text = sName; 
       txtPicture.Text = sPicture; 

      } 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
+0

프레이밍 된 것처럼 약 20 줄의 코드가 포함 된 IValueConverter와 함께 Xaml에서 완전히 수행 할 수 있습니다.가장 좋은 답변을 얻으려면 질문을 편집하여 콤보 상자를 채우는 데 사용 된 데이터 형식을 표시하고 선택 항목이 변경 될 때마다 db를 쿼리해야하는지 여부를 표시해야합니다. –

+0

감사합니다. – user2631662

답변

0

일반적으로이 사이트의 사용자는 질문 작성자가 귀하에게 더 많은 정보를 제공하는 것을 선호합니다. 우리는 또한 적어도 자신이 대답을 찾으려고 노력했음을보고 싶습니다.

그러나 새 사용자 인 경우 완전한 해결책을 제공 할 것입니다. 이를 달성하는 데는 여러 가지 방법이 있습니다 ... 나는 당신을 한 가지 방법으로 보여줄 것이고 당신의 요구에 맞출 수 있습니다.

은 당신의 MainWindow.xaml.cs 파일에 다음과 같은 새로운 WPF 프로젝트를 시작하고 추가

: 여기

using System; 
using System.Collections.ObjectModel; 
using System.Windows; 

namespace WpfApplication1 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      DataContext = this; 
      Images.Add(new Tuple<string, string>("Picture 1", 
"/WpfApplication1;component/Images/Picture 1.png")); 
      Images.Add(new Tuple<string, string>("Picture 2", 
"/WpfApplication1;component/Images/Picture 2.png")); 
      Images.Add(new Tuple<string, string>("Picture 3", 
"/WpfApplication1;component/Images/Picture 3.png")); 
     } 

     public static DependencyProperty ImagesProperty = DependencyProperty.Register(
"Images", typeof(ObservableCollection<Tuple<string, string>>), typeof(MainWindow), 
new PropertyMetadata(new ObservableCollection<Tuple<string, string>>())); 

     public ObservableCollection<Tuple<string, string>> Images 
     { 
      get { return (ObservableCollection<Tuple<string, string>>)GetValue(
ImagesProperty); } 
      set { SetValue(ImagesProperty, value); } 
     } 
    } 
} 

나는 이미지 정보를 보유 Images라는 DependencyProperty 만들었습니다. 그것은 형식이입니다. 그리고 이것은 각 그림의 파일 경로 인 을 추가 할 수있게 해줍니다. 데이터베이스에 이미지가있는 시스템에이를 적용해야합니다. 이미지를 특정 폴더에 저장 한 다음 파일 경로를 참조하여 이미지 객체를 Image 컨트롤에로드하는 것보다 훨씬 쉽습니다.

다음
<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition Height="100" /> 
     </Grid.RowDefinitions> 
     <Image Grid.Row="0" Source="{Binding SelectedValue, 
ElementName=ImageComboBox}" /> 
     <ComboBox Grid.Row="1" Name="ImageComboBox" ItemsSource="{Binding Images}" 
DisplayMemberPath="Item1" SelectedValuePath="Item2" Height="23" Width="120" /> 
    </Grid> 
</Window> 

나는 ComboBox.ItemsSource 속성에 Images 수집을 결합하고 Item1DisplayMemberPath 속성을 설정 ...이 첫 번째 Tuple의 이름입니다

다음으로, 당신의 MainWindow.xaml 파일에 다음 코드를 삽입 속성을 포함하고 있으므로 이름이 표시됩니다. 또한 SelectedValuePath 속성을 Item2 ...으로 설정합니다. 이것은 그림 파일 경로를 보유하는 두 번째 Tuple 속성의 이름입니다. 따라서 선택한 항목의 값은 선택한 Image의 파일 경로가됩니다.

또한 Image.Source 속성은 Binding SelectedValue, ElementName=ImageComboBox으로 설정됩니다. 즉, 그림의 원본은 ComboBox.SelectedValue에서 나옵니다. 기억해두면 선택한 이미지의 파일 경로로 설정됩니다.

유의할 것들 :

당신은 물론만큼 당신이 ComboBox.SelectedValuePathComboBox.DisplayMemberPath 속성에 사용할 올바른 속성의 이름을 업데이트 할 때 자신의 클래스와 Tuple 객체를 대체 할 수 있습니다.

또한이 예제 코드에서 사용하는 이미지를 응용 프로그램 루트 디렉토리에있는 Images 폴더에 추가하십시오. 또한 Picture 1.png, Picture 2.pngPicture 3.png이라고 지정하지 않으면 Images 컬렉션에 추가하는 파일 경로를 업데이트해야합니다.

+0

감사합니다. 좋은 예입니다. – user2631662

+1

@ user2631662, Sheridan의 답변이 마음에 들면 '수락'버튼을 사용하여 표시하십시오. 이렇게하면 다른 사용자에게 그의 대답이 올바르게 작동했음을 알릴 수 있습니다. 앞으로의 질문에 대한 관심도를 높이는 데 도움이 될 것입니다. –

관련 문제