foreigh Ответов: 1

Выражение в таблицу значений на C#


Привет , я хочу объявить математическое выражение между значениями из datatable , например: у меня есть два столбца с именами 'Variable'(string) и 'Contents' (float) , я вставил в 'Variables' 3 строки a , b и c, а в 'Contents' 3 поплавка равны 0, 3 и 6 .Теперь я хочу объявить 'a=b+c' в коде an, когда я нажимаю на "кнопку", переменная a изменится в datatable на 9. вот мой код, но он не работает!! помогите мне, пожалуйста !

Что я уже пробовал:

private void button11_Click(object sender, EventArgs e)
        {
            con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "select * from TableVar ";
            cmd.ExecuteNonQuery();
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            DataRow dr1 = dt.Select("Variable='a'").FirstOrDefault();
            DataRow dr2 = dt.Select("Variable='b'").FirstOrDefault();
            DataRow dr3 = dt.Select("Variable='c'").FirstOrDefault();
             
                dr1["Contents"] = Convert.ToDouble(dr2["Contents"])+ Convert.ToDouble(dr3["Contents"]);
                con.Close();
        }

Leo Chapiro

Попробуйте отлаживать код строка за строкой.

foreigh

но у меня есть 3 дроу, как я могу это сделать ?

#realJSOP

с помощью отладчика.

foreigh

не могли бы вы, пожалуйста, показать мне, как, например, я новичок ! пожалуйста

#realJSOP

google "как использовать отладчик visual studio". Весьма вероятно, что вы найдете видео на youtube.

foreigh

я пытался, но все еще не понимал, почему мой код не работает

1 Ответов

Рейтинг:
2

Maciej Los

Вы можете достичь этого, используя 2 метода:
1) объект DataTable.Метод Вычисления(String, String) (System.Data) | Microsoft Docs[^]

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]
	{
		new DataColumn("Variable", typeof(string)),
		new DataColumn("Contents", typeof(int))
	});
dt.Rows.Add(new object[]{"a", 0});
dt.Rows.Add(new object[]{"b", 3});
dt.Rows.Add(new object[]{"c", 6});

var sumObject = dt.Compute("Sum(Contents)", "Variable IN ('a', 'b', 'c')");
//returns: 9


2) Перечислимый.Метод Sum (System.Linq) | Microsoft Docs[^]

string[] tofind = {"a", "b", "c"};
var result = dt.AsEnumerable()
	.Where(x => tofind.Any(y=> (x.Field<string>("Variable").Equals(y))))
	.Sum(x=>x.Field<int>("Contents"));
//returns: 9


Возможно, Вам будет интересно прочитать эту замечательную статью: Механизм вычислений для .NET[^]


CPallini

5.

Maciej Los

Спасибо, Карло.