使用下面的查询select sum(Team1) from T_Score; 而不是cmd.ExecuteNonQuery(); 使用cmd.ExecuteScalar(); 并使用方法的返回值ExecuteScalar
https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.executescalar
像这样:
private void WriteToLabel()
{
using (SqlConnection conne = new SqlConnection(@"Data Source=LAPTOP-S2J1U9SJ\SQLEXPRESS;Initial Catalog=Unit4_IT;Integrated Security=True"))
{
conne.Open();
string selectQuery = "select sum(Team1) from T_Score;";
using (SqlCommand com = new SqlCommand(selectQuery, conne))
label1.Content = Convert.ToString(com.ExecuteScalar());
}
}
线
label1.Content = Convert.ToString(com.ExecuteScalar());
需要一个名为label1 的Label 才能工作。
它尝试将Convert.ToString(com.ExecuteScalar()) 的结果写入上述Label 的Content 属性中。
您也可以使用TextBlock 而不是使用Text 属性,所以这一行:
textBlock1.Text = Convert.ToString(com.ExecuteScalar());
注意,我没有手动调用conne.Close();,而是将SqlConnection conne 包装到using 语句中,这应该始终使用从IDisposable 继承的对象。
您可以在此处阅读IDisposable 和using 声明:
如果您的值已经在 IEnumerable 对象中,例如。 List<int> 你可以做以下事情
用一个简单的循环:
var myValues = new List<int>() { 1, 2, 3, 4, 5, 6 }; //<- list with temporary data
var sumOfValue = 0;
foreach (var myValue in myValues)
sumOfValue += myValue;
与LINQ:
var myValues = new List<int>() { 1, 2, 3, 4, 5, 6 }; //<- list with temporary data
var sumOfValue = myValues.Sum();
如果您没有 IEnumerable 或 int 而是 class,那么您的代码将如下所示
public class MyValue
{
public int Value { get; set; }
//other properties
}
var myValues = new List<MyValue>()
{
new MyValue() { Value = 1 },
new MyValue() { Value = 2 },
new MyValue() { Value = 3 },
new MyValue() { Value = 4 },
new MyValue() { Value = 5 },
new MyValue() { Value = 6 },
}; //<- list with temporary data
用一个简单的循环:
var sumOfValue = 0;
foreach (var myValue in myValues)
sumOfValue += myValue.Value;
LINQ:
var sumOfValue = myValues.Sum(x => x.Value);
在所有这些情况下,您都必须像这样将sumOfValue 写入您的Label 或TextBlock
//Label
label1.Content = sumOfValue.ToString();
//or TextBlock
textBlock1.Text = sumOfValue.ToString();
要将值传递到不同的页面,您只需执行以下操作。
在后面的代码中搜索您的页面,例如。 LeaderBoard。
它应该看起来像这样
public partial class LeaderBoard : Page
{
//stuff...
}
向这个类添加一个新属性
public partial class LeaderBoard : Page
{
public int MyProperty { get; set; }
//stuff...
}
当您初始化 LeaderBoard 例如。这里
this.NavigationService.Navigate(new LeaderBoard());
把初始化改成这样:
this.NavigationService.Navigate(new LeaderBoard() { MyProperty = 7187, });
7187 是一个随机数,需要填写您需要的任何内容。
有了这个,您已经将数据“传输”到LeaderBoard,并且可以在LeaderBoard 中访问具有其值的新属性,例如。可能有这样的方法
public void Foo()
{
textBlock1.Text = Convert.ToString(this.MyProperty);
}
这个类应该是这样的:
public partial class LeaderBoard : Page
{
public int MyProperty { get; set; }
//stuff...
public void Foo()
{
textBlock1.Text = Convert.ToString(this.MyProperty);
}
}
如果您需要在 LeaderBoard 打开时从其他位置更改 MyProperty,请保留您创建的引用。
为了保持引用改变这一行
this.NavigationService.Navigate(new LeaderBoard() { MyProperty = 7187, });
到这里
_leaderBoard = new LeaderBoard() { MyProperty = 7187, };
this.NavigationService.Navigate(_leaderBoard);
并像这样在外部范围内创建Field
private LeaderBoard _leaderBoard; //<- needs to be outside the method
private void Btn_LeaderB_Click(object sender, RoutedEventArgs e)
{
_leaderBoard = new LeaderBoard() { MyProperty = 7187, };
this.NavigationService.Navigate(_leaderBoard);
}
如果Btn_LeaderB_Click 被多次调用,但您只想创建 1 个排行榜,您可以这样做:
private void Btn_LeaderB_Click(object sender, RoutedEventArgs e)
{
if (_leaderBoard == null)
_leaderBoard = new LeaderBoard() { MyProperty = 7187, };
this.NavigationService.Navigate(_leaderBoard);
}
这样_leaderBoard 字段只会被初始化一次。
如果您想在每次调用Btn_LeaderB_Click 方法时增加MyProperty 的值,您可以进一步将其扩展为:
private void Btn_LeaderB_Click(object sender, RoutedEventArgs e)
{
if (_leaderBoard == null)
_leaderBoard = new LeaderBoard() { MyProperty = 7187, };
else
_leaderBoard.MyProperty += int.Parse(txt_score4_tm1.Text);
this.NavigationService.Navigate(_leaderBoard);
}