1

次のように、3つのコンボボックスとXMLファイルを含むWindowsフォームがあります

<?xml version="1.0"?>
<shrtcutkeys>
    <Keysmain>
        <keychars>
            <key1>
                Ctrl
            </key1>
            <key1>
                Alt
            </key1>
            <key1>
                Shift
            </key1>
        </keychars>
    </Keysmain>
    <Seckeys>
        <keychars>
            <key2>
                Ctrl
            </key2>
            <key2>
                Alt
            </key2>
            <key2>
                Shift
            </key2>
        </keychars>
    </Seckeys>
    <Alphas>
        <keychars>
            <key3>
                a
            </key3>
            <key3>
                b
            </key3>
            <key3>
                c
            </key3>
        </keychars>
    </Alphas>
</shrtcutkeys>

だから私はコンボボックス1のすべてのキー1とコンボボックス2のすべてのキー2などを表示したいと思います..これを試してみましたが、実際には機能しませんでした

DataSet dsSet = new DataSet();
            dsSet.ReadXml("C:\\Users\\jackandjill\\Documents\\Visual Studio 2010\\Projects\\highlite\\highlite\\keys.xml");
            comboBox1.DataSource = dsSet.Tables["keys"];
            comboBox1.DisplayMember = "key1";  
4

2 に答える 2

4

私は Linq2XML を使用することを好みます。

データを次のファイルにロードしますXDocument:
ファイルからロード:

var xmlDocument = XDocument.Load(fileName);

または文字列からロードする

var xmlDocument = XDocument.Parse( @"<?xml version=""1.0""?>
<shrtcutkeys>
    <Keysmain>
        <keychars>
            <key1>
                Ctrl
            </key1>
            <key1>
                Alt
            </key1>
            <key1>
                Shift
            </key1>
        </keychars>
    </Keysmain>
    <Seckeys>
        <keychars>
            <key2>
                Ctrl
            </key2>
            <key2>
                Alt
            </key2>
            <key2>
                Shift
            </key2>
        </keychars>
    </Seckeys>
    <Alphas>
        <keychars>
            <key3>
                a
            </key3>
            <key3>
                b
            </key3>
            <key3>
                c
            </key3>
        </keychars>
    </Alphas>
</shrtcutkeys>");

次に、必要なアイテムを選択できます

var mainItems = from key in xmlDocument.Descendants("key1")
                select key.Value;
var secKeyItems = from key in xmlDocument.Descendants("key2")
                select key.Value;
var alphaItems = from key in xmlDocument.Descendants("key3")
                select key.Value;

次のように、各コンボを選択した結果にバインドできるようになりました。

comboBox1.DataSource = mainItems.ToList();

XML をウォッシュしたい場合があります (改行とスペースを削除するため)。

var mainItems = from key in xmlDocument.Descendants("key1")
                select key.Value.Trim();
var secKeyItems = from key in xmlDocument.Descendants("key2")
                select key.Value.Trim();
var alphaItems = from key in xmlDocument.Descendants("key3")
                select key.Value.Trim();
于 2012-07-02T15:15:49.547 に答える
2

XML への LINQ の使用:

var xml = XElement.Parse(
                @"<shrtcutkeys>
                        <Keysmain>
                            <keychars>
                                <key1>
                                    Ctrl
                                </key1>
                                <key1>
                                    Alt
                                </key1>
                                <key1>
                                    Shift
                                </key1>
                            </keychars>
                        </Keysmain>
                        <Seckeys>
                            <keychars>
                                <key2>
                                    Ctrl
                                </key2>
                                <key2>
                                    Alt
                                </key2>
                                <key2>
                                    Shift
                                </key2>
                            </keychars>
                        </Seckeys>
                        <Alphas>
                            <keychars>
                                <key3>
                                    a
                                </key3>
                                <key3>
                                    b
                                </key3>
                                <key3>
                                    c
                                </key3>
                            </keychars>
                        </Alphas>
                    </shrtcutkeys>");

var key1 = xml.Descendants("key1");

foreach (var key in key1)
    comboBox1.Items.Add(key.Value.Trim());

var key2 = xml.Descendants("key2");

foreach (var key in key2)
    comboBox2.Items.Add(key.Value.Trim());

//Do the same for other keys...
于 2012-07-02T15:19:15.807 に答える