2016-07-30 182 views
1

我想将findFamily对象的值赋给不同的TextBox(s)我尝试了下面的代码,但它不工作,请你给我一个更好的方法。提前致谢。如何将List <>对象值赋给textBox(s)

private void Search_Click(object sender, RoutedEventArgs e) 
    { 
     if (SearchFamilyMemberId.Text.Trim() != "") 
     { 
      SITDataDataContext con = new SITDataDataContext(); 
      List<Family> findFamily = (from s in con.Families where s.FamilyMemberId.Equals(SearchFamilyMemberId.Text.Trim()) select s).ToList(); 
      if (findFamily.Any()) 
      { 
       FamilyMemberId.Text = findFamily[0]; 
       FirstName.Text = findFamily[1]; 
       LastName.Text = findFamily[2]; 
       if (findFamily[3]=="Male") 
       { 
        Male.IsChecked = true; 
       } 
       else 
       { 
        Female.IsChecked = true; 
       } 
       Phone.Text = findFamily[4]; 
       Address.Text = findFamily[5]; 

      } 
      else 
      { 
       MessageBox.Show("Family Id not found!"); 
      } 
     } 
     else 
     { 
      MessageBox.Show("Invalid Id!"); 
     } 
    } 

这里是我的xamal代码

<Grid Margin="10"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Label Grid.Row="1" Grid.Column="0" Content="Family Member ID:"/> 
     <Label Grid.Row="2" Grid.Column="0" Content="First Name:"/> 
     <Label Grid.Row="3" Grid.Column="0" Content="Last Name:"/> 
     <Label Grid.Row="4" Grid.Column="0" Content="Gender:"/> 
     <Label Grid.Row="5" Grid.Column="0" Content="Phone:"/> 
     <Label Grid.Row="6" Grid.Column="0" Content="Address:"/> 

     <CheckBox Name="ColonyResident" Content="Colony Resident" Grid.Row="0" Grid.Column="0" Margin="5" Checked="ColonyResident_Checked" Unchecked="ColonyResident_Unchecked"/> 
     <TextBox Name="SearchFamilyMemberId" IsEnabled="False" SelectionChanged="FamilyMemberId_SelectionChanged" Grid.Row="0" Grid.Column="1" Margin="3"/> 
     <TextBox Name="FamilyMemberId" IsEnabled="False" Grid.Row="1" Grid.Column="1" Margin="3" Grid.ColumnSpan="2"/> 
     <TextBox Name="FirstName" Grid.Row="2" Grid.Column="1" Margin="3" Grid.ColumnSpan="2"/> 
     <TextBox Name="LastName" Grid.Row="3" Grid.Column="1" Margin="3" Grid.ColumnSpan="2"/> 
     <RadioButton Name="Male" Grid.Row="4" Grid.Column="1" Margin="3" Content="Male" /> 
     <RadioButton Name="Female" Grid.Row="4" Grid.Column="2" Margin="3" Content="Female" /> 
     <TextBox Name="Phone" Grid.Row="5" Grid.Column="1" Margin="3" Grid.ColumnSpan="2"/> 
     <TextBox Name="Address" Grid.Row="6" Grid.Column="1" Margin="3" Grid.ColumnSpan="2" TextWrapping="Wrap"/> 
     <Button Name="Search" IsEnabled="False" Grid.Row="0" Grid.Column="2" Margin="3" MinWidth="100" MinHeight="25" HorizontalAlignment="Center" Content="Search" Click="Search_Click"/> 
     <Button IsDefault="True" Grid.Row="7" Grid.Column="1" Margin="3" MinWidth="100" MinHeight="25" HorizontalAlignment="Center" Content="Add" Click="Add_Click"/> 
     <Button Grid.Row="7" Grid.Column="2" Margin="3" MinWidth="100" MinHeight="25" HorizontalAlignment="Center" Content="Clear" Click="Clear_Click"/> 

    </Grid> 

回答

0

使用foreach循环通过列表如下:

foreach(var a in findFamily) 
{ 

    txtbox.text=a[0].tostring(); 

    txtbox2.text=a[1].tostring(); 

} 

或使用:

txtbox.text = findFamily.Select(a => a[0].ToString()).FirstOrDefault().ToString(); 
0

你为什么不使用数据捆绑?

对于每一个你有文本框,绑定你TextBox.Text在视图模型的相应属性,这样的事情:

<TextBox Text={Binding FirstName} /> 

然后,分配你的FirstNameLastName ...等。属性设置为值并为每个属性(您的视图模型应执行INotifyPropertyChanged)提出INotifyPropertyChanged.PropertyChanged,并且您的视图(即UI)应该更新。

0

我不同意这里发布的任何答案。这个问题似乎并不正确。

如果您有家庭成员的列表。那么你怎么能把它作为一个单一的项目。你怎么知道你想要显示哪个项目。

因此,我的建议是使用列表框并使用数据绑定,创建一个视图以显示当前选定的家庭成员的数据在该视图中。

相关问题