7

次のようなデータを取得するデータグリッドがあります。

    public struct MyData
    {
        public string name { set; get; }
        public string artist { set; get; }
        public string location { set; get; }
    }

    DataGridTextColumn col1 = new DataGridTextColumn();
    col4.Binding = new Binding("name");
    dataGrid1.Columns.Add(col1);
    dataGrid1.Items.Add((new MyData() { name = "Song1", artist = "MyName", location =     "loc"}));
    dataGrid1.Items.Add((new MyData() { name = "Song2", artist = "MyName", location =     "loc2"}));

問題は、ユーザーがセルを編集しようとしたり、複数のセルをドラッグしようとしたりするたびに、アプリが例外をスローすることです。

System.InvalidOperationException は処理
されませんでした メッセージ: 'EditItem' はこのビューでは許可されていません。

どうしてこれなの?データの入力方法のせいですか?
何か案は?
ありがとう!

4

6 に答える 6

12

ItemsSource を IEnumerable<T> に割り当てるときにこの問題が発生しました。

IEnumberable<T> を List<T> に変換し、それを ItemsSource に割り当てることで修正しました。

IEnumerable を使用するとその問題が発生する理由はわかりませんが、この変更により修正されました。

于 2012-12-04T09:19:49.560 に答える
11

a をstruct使用するclass代わりに、代わりに a を使用します。

更新された回答: MyData インスタンスをリストに追加してから、そのリストを DataGrid.ItemsSource に割り当ててみてください

于 2011-08-04T21:55:21.423 に答える
1

datagrid DataGridCheckBoxColumnを使用する場合は<Setter Property="IsEditing" Value="true" /> 、チェックボックスの列を設定する必要があります。これを参照してください:https ://stackoverflow.com/a/12244451/1643201

于 2012-09-03T08:40:08.000 に答える
1

この答えは私自身のものではなく、AnthonyWJones によって提案された実際のコード例です。

public class MyData //Use class instead of struct
{
    public string name { set; get; }
    public string artist { set; get; }
    public string location { set; get; }
}

DataGridTextColumn col1 = new DataGridTextColumn();
col4.Binding = new Binding("name");
dataGrid1.Columns.Add(col1);
dataGrid1.Items.Add((new MyData() { name = "Song1", artist = "MyName", location =     "loc"}));
dataGrid1.Items.Add((new MyData() { name = "Song2", artist = "MyName", location =     "loc2"}));

//Create a list of MyData instances
List<MyData> myDataItems = new List<MyData>(); 
myDataItems.Add(new MyData() { name = "Song1", artist = "MyName", location =     "loc"});
myDataItems.Add(new MyData() { name = "Song2", artist = "MyName", location =     "loc2"});

//Assign the list to the datagrid's ItemsSource
dataGrid1.ItemsSource = items;
于 2014-03-13T17:56:49.690 に答える