質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

9364閲覧

DataGridのバインドの仕方

siromi

総合スコア13

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2017/06/14 11:00

###前提・実現したいこと
VBでWPFアプリケーションを作っています。
DataGridのデータバインドの仕方がわかりません。
xamlのみ記載はできたのですが、VB側の書き方がまったくわかりません。
恐れ入りますが教示お願いいたします。

###該当のソースコード
<xaml>
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Sample" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525">

<Grid> <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" VerticalAlignment="Top" Height="118" Width="260"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding book}" Header="本" MinWidth="50" /> <DataGridTextColumn Binding="{Binding url}" Header="URL" MinWidth="50" /> <DataGridTextColumn Binding="{Binding memo}" Header="備考" MinWidth="50" /> </DataGrid.Columns> </DataGrid> </Grid>
</Window>

###補足情報(言語/FW/ツール等のバージョンなど)
VisualStudio2015 Professional
初心者です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

簡単に書くとこんな感じ

<DataGrid x:Name="dataGrid" HorizontalAlignment="Left" VerticalAlignment="Top" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding book}" Header="本" MinWidth="50" /> <DataGridTextColumn Binding="{Binding url}" Header="URL" MinWidth="50" /> <DataGridTextColumn Binding="{Binding memo}" Header="備考" MinWidth="50" /> </DataGrid.Columns> </DataGrid>

列を定義するならAutoGenerateColumns="False"を書いておこう

Public Class Item Property book As String Property url As String Property memo As String End Class Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded Dim Items As New List(Of Item) Items.Add(New Item With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Items.Add(New Item With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Items.Add(New Item With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Items.Add(New Item With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Items.Add(New Item With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Items.Add(New Item With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) dataGrid.ItemsSource = Items End Sub

要はListなどのコレクションを生成してItemsSourceに突っ込めば、よきに計らってくれるのがデータバインド
あとItemをSystem.ComponentModel.INotifyPropertyChangedを継承する形で定義したり、Listの代わりにSystem.Collections.ObservableCollectionを使うようにすると賢い動きをしてくれるようになります

回答を補足 2017/06/16

質問者さんからできないとのコメントがあったので手順を踏んで解説しておきます

踏んだ手順(コメントに書いたとおり)

  1. VisualStudioを起動
  2. ファイル→新規プロジェクトでWPFアプリケーション
  3. MainWindow.xamlに例示されたXAMLを貼り付け XAML側 AutoGenerateColumns="False"も追記しておく
  4. MainWindow.xamlを右クリックしてコードの表示を選択 コードビハインド側を表示する
  5. コードを書いた コードビハインド側

実行結果

実行結果
見ての通りエラーなんて出ません

これでできなければもうムリかもなので、もう少し基本を押さえなおした方がいいかもしれませんね

投稿2017/06/14 13:13

編集2017/06/15 19:37
dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

siromi

2017/06/15 06:33

dojikkoさん ご回答ありがとうございます。 2点質問です。 ■質問1 Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded ”名前空間では有効でないステートメントです”とエラーがでました。こちらはどこに定義をすればよいのでしょうか xamlを以下のように修正したのですが解消されませんでした。 <DataGrid x:Name="MainWindow_Loaded" HorizontalAlignment="Left" VerticalAlignment="Top" AutoGenerateColumns="False"> ■質問2 DataGrid.ItemsSource = Items ”非共有メンバーを参照するにはオブジェクト参照が必要です”という内容のエラーが表示されます こちらは具体的に何をすればいいのでしょうか。 アドバイスよろしくお願いいたします。
dojikko

2017/06/15 06:45 編集

一応私がやったことを書いておきます VisualStudioで 新規プロジェクト→WPFアプリケーションで MainWindow.xamlに例示されたXAMLを貼り付け MainWindow.xamlを右クリックしてコードの表示を選択 そこでコードを書いたものを回答として貼っています
siromi

2017/06/15 12:06

dojikkoさん 返信ありがとうございます。 同じことをやったのですが、やはり同じえらーが出てしまいました。。。。 xamlに Loaded="Window_Loaded"をたしてみたのですがそれもダメでした。
dojikko

2017/06/15 19:42

できなかったのなら同じことをやっていません 本当に同じようにやったか確認をしてみてください
dojikko

2017/06/15 19:44

私のVisualStudioと見え方が違いますとかコメントされたら泣く(笑
guest

0

自己解決

サンプルソースが落ちていたので真似して書いてみたら思い通りの表ができました。
ただ、内容理解していないので解読が必要です。。。。。。
WPF、VB難しいです。。。

■MainWindow.xaml

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:SampleProject2" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> <d:DesignProperties.DataContext> <SampleDataCollection xmlns="clr-namespace:SampleProject2" /> </d:DesignProperties.DataContext> <Grid x:Name="RootGrid"> <DataGrid x:Name="DataGrid1" AutoGenerateColumns="False" HorizontalAlignment="Left" ItemsSource="{Binding DataContext, Mode=TwoWay, RelativeSource={RelativeSource Self}}" > <DataGrid.Columns> <DataGridTextColumn Binding="{Binding book}" Header="本" MinWidth="50" /> <DataGridTextColumn Binding="{Binding url}" Header="URL" MinWidth="50" /> <DataGridTextColumn Binding="{Binding memo}" Header="備考" MinWidth="50" /> </DataGrid.Columns> </DataGrid> </Grid> </Window>

■SampleData.vb

Imports System.ComponentModel Imports System.Collections.ObjectModel ' 表示する個々のデータ(データバインド可能) Public Class SampleData 'Implements INotifyPropertyChanged Public Property book As String Public Property url As String Public Property memo As String End Class ' 表示するデータのコレクション(データバインド可能) Public Class SampleDataCollection Inherits ObservableCollection(Of SampleData) Public Sub New() ' 初期データ Me.Add(New SampleData() With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Me.Add(New SampleData() With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Me.Add(New SampleData() With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) End Sub End Class

■MainWindow.xaml.vb

Class MainWindow Property book As String Property url As String Property memo As String ' 表示するデータ Private _data As SampleDataCollection = New SampleDataCollection() ' 画面が表示されるとき、データを画面にセットする Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) ' データをそのままセットする 'Me.RootGrid.DataContext = _data Dim Items As New List(Of MainWindow) Items.Add(New MainWindow With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Items.Add(New MainWindow With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Items.Add(New MainWindow With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Items.Add(New MainWindow With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Items.Add(New MainWindow With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Items.Add(New MainWindow With {.book = "初心者のためのVB.net", .url = "http://https://teratail.com/tags/VB", .memo = "たぶんそんな本はないと思う"}) Me.RootGrid.DataContext = Items End Sub End Class

投稿2017/06/15 12:40

siromi

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問