locked
textboxの値をdatagridに表示したい。 RRS feed

  • 質問

  • はじめまして。

    今、VB2010 & Silverlight4の環境で、

    textboxの内容をbuttonクリックで、datagridに表示するという動きを実現使用としています。

    しかし、デバックで動きを見るとtextboxの値は取得している様ですが、追加された行に値はありません。

    また、エラーメッセージも出てきていません。

     

    基本的には、http://msdn.microsoft.com/ja-jp/silverlight/ff715310このサンプルを見て作りました。

    以下コード

    ”XAML”

     <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
          <RowDefinition Height="151*" />
          <RowDefinition Height="149*" />
        </Grid.RowDefinitions>
        <TextBox Height="45" HorizontalAlignment="Left" Margin="18,29,0,0" Name="textBox1" VerticalAlignment="Top" Width="189" />
        <sdk:DataGrid AutoGenerateColumns="False" Grid.Row="1" Height="83" HorizontalAlignment="Left" Margin="15,23,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="247" AreRowGroupHeadersFrozen="False">
         <sdk:DataGrid.Columns>
         <sdk:DataGridTextColumn Header="テキスト" Binding="{Binding Path=bbb }" />
         </sdk:DataGrid.Columns>
        </sdk:DataGrid>
        <Button Content="Button" Height="44" HorizontalAlignment="Left" Margin="241,29,0,0" Name="button1" VerticalAlignment="Top" Width="109" Click="button1_Click" />
      </Grid>

    ”MainPage.xaml.cs”

     public partial class MainPage : UserControl
      {
        public MainPage()
        {
          InitializeComponent();
        }
    
        private void button1_Click(object sender, System.Windows.RoutedEventArgs e)
        {
         // TODO: ここにイベント ハンドラーのコードを追加します。
          string aaa = textBox1.Text;
          var datas = new List<Data>()
          {
            new Data() {bbb = aaa}  ←ここでは、aaaに値が入っている。
          };
          dataGrid1.ItemsSource = datas;
        }
      }
    

    ”エンティティクラス”

    class Data
      {
        public string bbb { get; set; }
      }
    

    何が問題で、行だけ追加されていて値が表示されないのか分からないので困っています。

    例えば、プロパティやバインディングの指定が間違っている気がするのですが、原因を見つけられませんでした…

    原因だと考えられる場所だけでも、かまいませんのでご教示ください。

    2010年12月15日 2:49

回答

  • 確認しきれていませんが、ItemsSourceを設定するとBindingで使用されるDataContextは無視されたように思います。(ご提示のコードではDataContextが設定されていないようですが・・・)
    したがって、

    dataGrid1.ItemsSource = datas;

    dataGrid1.DataContext= datas;

    としてみて下さい。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク 03188 2010年12月17日 12:12
    2010年12月15日 3:24
    モデレータ
  • Data クラスを public なクラスにすれば、DataGrid に bbb プロパティの内容が表示されると思います。

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク 03188 2010年12月17日 12:12
    2010年12月15日 3:44

すべての返信

  • 確認しきれていませんが、ItemsSourceを設定するとBindingで使用されるDataContextは無視されたように思います。(ご提示のコードではDataContextが設定されていないようですが・・・)
    したがって、

    dataGrid1.ItemsSource = datas;

    dataGrid1.DataContext= datas;

    としてみて下さい。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク 03188 2010年12月17日 12:12
    2010年12月15日 3:24
    モデレータ
  • Data クラスを public なクラスにすれば、DataGrid に bbb プロパティの内容が表示されると思います。

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク 03188 2010年12月17日 12:12
    2010年12月15日 3:44
  • 回答、ありがとうございました。

    >確認しきれていませんが、ItemsSourceを設定するとBindingで使用されるDataContextは無視されたように思います。>(ご提示のコードではDataContextが設定されていないようですが・・・)

    ItemSourceの設定だとDataContextは無視されてしまうんですね…

    解決は、なかむらさんの方法でしましたが(なんとeasy misss!!)、今後の参考になりました。

    現在、このコードを使用した成果物の作成期限が迫っている為確認が出来てませんが、

    時間が出来たら確認してみようと思います。

    ありがとうございました!

     


    03188
    2010年12月16日 12:02
  • 解決しました!

    ありがとうございます。

    細かいプロパティの設定等ばかりが気になって、 publicに気がつきませんでした…

    無事、DataGridに値が表示されました。

    視野を大きく持つ事って大事ですね~。心がけます。

    ありがとうございました。

     


    03188
    2010年12月16日 12:05