Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Запись в XML файл


Автор: golfV 11.2.2010, 10:22
Доброго времени суток!
Появилась такая проблемка, Создаю xml файл и записывю туда данные с формы. Записывается все нормально, только ID записи доходит только до 10 и дальше все время повторяется, некак немогу понять почему
Код

            DateTime datetime = DateTime.Now;
            if (textBox1.Text == "") return;
            if (textBox2.Text == "") return;
            if (textBox3.Text == "") return;
            if (textBox4.Text == "") return;
            if (textBox5.Text == "") return;
            DataRow[] datarows = null;
            //Ищу максимальное ID в DataSet (в Datatable)
            string s = string.Empty;
            try
            {
                datarows = MyDatatable.Select("id=max(id)");
                s = datarows[0]["id"].ToString();
            }
            catch (Exception)
            {

            }
            if (s == "" || s == string.Empty)
            {
                s = "0";
            }
           int i = int.Parse(s) + 1;
            DataRow datarow = MyDataSet.Tables[0].NewRow();
                datarow[0] = Convert.ToString(i);
                datarow[1] = textBox2.Text.Trim();
                datarow[1] = comboBox1.Text.Trim();
                datarow[2] = textBox6.Text.Trim();
                datarow[3] = textBox7.Text.Trim();
                datarow[4] = textBox4.Text.Trim();
                datarow[5] = textBox5.Text.Trim();
                datarow[6] = textBox1.Text.Trim();
                datarow[7] = textBox2.Text.Trim();
                datarow[8] = textBox3.Text.Trim();
                datarow[9] = result.Trim();
                datarow[10] = datetime;
                MyDataSet.Tables[0].Rows.Add(datarow);          
            
            if (i == 1)
            {
                MyDataSet.Tables[0].DefaultView.AllowDelete = true;
                MyDataSet.Tables[0].DefaultView.Delete(0);
            }
         
            textBox3.Text = "";
            textBox2.Text = "";
            textBox1.Text = "";
            MyDataSet.WriteXml(sCurDir + @"\scale.xml", XmlWriteMode.WriteSchema);
            MyDataSet = new DataSet();
            MyDataSet.ReadXml(sCurDir + @"\scale.xml", XmlReadMode.Auto);
            MyDatatable = MyDataSet.Tables[0];

        }

подскажите может я неправельно вычисляю id?

Автор: uranpro 11.2.2010, 12:07
тема называется запись в xml

Автор: kobra 11.2.2010, 16:32
вообшето зачем расчитывать, когда можно сделать 
Код
            System.Data.DataColumn dc = new System.Data.DataColumn();
            dc.AutoIncrement = true;

правда алгоритм мне не понравился, я бы сделал так
Код
            int i = 1;
            if (MyDatatable.Rows.Count > 0)
            {
                System.Data.DataRow[] datarows = MyDatatable.Select("id=max(id)");
                i = int.Parse(datarows[0]["id"].ToString()) + 1;
            }
, но вроде все в порядке.
проидис по коду дебагером и увидиш где глучит

Автор: golfV 11.2.2010, 17:04
проходился дебагером, после того как id становится 9 он потом прибовляет к ней 1, когда после это снова прохожу опять показывает что id 9. Немогу понять в чем проблема

Автор: kobra 11.2.2010, 18:26
тип полья сделай интегер. 
для стринга 9 болше чем 10, и даже 8999999.

Автор: golfV 12.2.2010, 09:35
сделал тип полян int тоже не помогло. Вычисляю id по другому
Код

 int i = 1;
                   if (MyDatatable.Rows.Count > 0)
                   {
                       i = MyDatatable.Rows.Count + 1;
                   }

незнаю на сколько это правельно, но работает.

Автор: kobra 12.2.2010, 11:38
Цитата(golfV @  12.2.2010,  09:35 Найти цитируемый пост)
незнаю на сколько это правельно, но работает.
плохое решение. если по ходу работы удалить уже введенную строку а потом добавить новую, будет накладка.
Цитата(golfV @  12.2.2010,  09:35 Найти цитируемый пост)
сделал тип полян int тоже не помогло
чудес не бывает
Код

            System.Data.DataTable dt = new System.Data.DataTable();
            System.Data.DataColumn c1 = new System.Data.DataColumn("id", System.Type.GetType("System.Int32"));
            dt.Columns.Add(c1);
            System.Data.DataColumn c2 = new System.Data.DataColumn("text");
            dt.Columns.Add(c2);
            for (int c = 10; c < 30; c++)
            {
                System.Data.DataRow dr = dt.NewRow();
                int i = 1;
                if (dt.Rows.Count > 0)
                {
                    System.Data.DataRow[] dra = dt.Select("id = max(id)");
                    i = int.Parse(dra[0]["id"].ToString()) + 1;
                }
                dr[0] = i.ToString();
                dr[1] = c.ToString();
                dt.Rows.Add(dr);
            }

а так и вычислять не нужно
Код
            System.Data.DataTable dt = new System.Data.DataTable();
            System.Data.DataColumn c1 = new System.Data.DataColumn("id", System.Type.GetType("System.Int32"));
            c1.AutoIncrement = true;
            dt.Columns.Add(c1);
            System.Data.DataColumn c2 = new System.Data.DataColumn("text");
            dt.Columns.Add(c2);
            for (int c = 10; c < 30; c++)
            {
                System.Data.DataRow dr = dt.NewRow();
                dr[1] = c.ToString();
                dt.Rows.Add(dr);
            }


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)