Ответы пользователя по тегу C#
  • C# как добавлять несколько элементов с параметрами в созданный XML документ?

    @rare
    Вам нужно вынести xdocument в переменную класса, а в обработчике проверять, если документ null, то создать, если не null, то найти элемент Text и добавить новые узлы после него.

    public partial class Form1 : Form
    {
        private readonly XDocument _xml;
        public Form1()
        {
            InitializeComponent();
            _xml = CreateNewXml();
        }
    
        private void button1_Click(object sender, EventArgs e) 
        {        
            var docNode = _xml.Root.Element("Document");
            var lastTextNode = docNode.Elements("Text").LastOrDefault();
            var textNode = CreateNewTextNode();
            if (lastTextNode != null)
                lastTextNode.AddAfterSelf(textNode);
            else
                docNode.Add(textNode);
            
            _xml.Save("_s.temp");
        }
    
        private XDocument CreateNewXml()
        {
            var doc = new XDocument(new XDeclaration("1.0", "windows-1251", null));
            var fileNode = new XElement("File");
            fileNode.Add(new XAttribute(XNamespace.Xmlns + "xsi", 
                "http://www.w3.org/2001/XMLSchema-instance"));
            fileNode.Add(new XAttribute("id", 1),
                new XAttribute("version", "2.0"));            
            XElement docNode = new XElement("Document");
            docNode.Add(new XAttribute("DocId", 11512),
                new XAttribute("Date", "12.07.15"));
    
            fileNode.Add(docNode);
            doc.Add(fileNode);
    
            return doc;
        }
    
        private XElement CreateNewTextNode()
        {
            XElement textNode = new XElement("Text");
            textNode.Add(
                new XAttribute("a", textBox1.Text),
                new XAttribute("b", textBox2.Text));            
            return textNode;
        }
    
        private void button2_Click(object sender, EventArgs e) 
        {
            textBox1.Text = null;
            textBox2.Text = null;
        }
    }
    Ответ написан
  • Как конвертировать ObservableCollection в DataTable?

    @rare
    Не уверен, что без перебора можно обойтись. Каким-то образом обойти значения все же придется. К тому же у DataTable нет возможности задать стразу все строки, только добавлять по одной. Могу предложить такой вариант:
    var persons = new ObservableCollection<Person>();
    var table = new DataTable("Persons");
    var nameCol = new DataColumn("name") {DataType = typeof (string), AllowDBNull = true};
    table.Columns.Add(nameCol);
    var ageCol = new DataColumn("age") {DataType = typeof (int), AllowDBNull = false};
    table.Columns.Add(ageCol);
    persons.ToList().ForEach(p =>
    {
        var row = table.NewRow();
        row.SetField(nameCol, p.Name);
        row.SetField(ageCol, p.Age);
        table.Rows.Add(row);
    });
    Ответ написан
    1 комментарий