c# - 将存储在列中的所有值显示到标签?
问题描述
我有一个名为的表和名为T_Score
的列Team1
,它有一些存储的值,我希望将这些值添加并显示在标签上。
这是将值存储在表中的代码:
private void Btn_LeaderB_Click(object sender, RoutedEventArgs e)
{
this.NavigationService.Navigate(new LeaderBoard());
SqlConnection conne = new SqlConnection(@"Data Source=LAPTOP-S2J1U9SJ\SQLEXPRESS;Initial Catalog=Unit4_IT;Integrated Security=True");
conne.Open();
string insertQuery = "insert into T_Score(Team1) " +
"values(@Team1)";
SqlCommand com = new SqlCommand(insertQuery, conne);
com.Parameters.AddWithValue("@Team1", txt_score4_tm1.Text);
com.ExecuteNonQuery();
conne.Close();
}
此代码存储需要与前一个值相加的值。
解决方案
使用下面的查询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());
需要Label
调用label1
它才能工作。它尝试将 的结果写入saidConvert.ToString(com.ExecuteScalar())
的Content
属性中Label
。
您还可以使用 a TextBlock
and than 使用Text
属性,所以这一行:
textBlock1.Text = Convert.ToString(com.ExecuteScalar());
conne.Close();
请注意,我没有手动调用,而是SqlConnection conne
将.using
IDisposable
您可以在此处阅读有关IDisposable
和using
声明:
- https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement
- https://docs.microsoft.com/en-us/dotnet/api/system.idisposable
- https://stackoverflow.com/a/61131/2598770
如果您的对象中已有值,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
ofint
而是 a 而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);
}
}
如果您需要在打开MyProperty
时从其他位置更改,LeaderBoard
请保留您创建的参考。
要保留参考更改此行
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
字段只会被初始化一次。如果您想在MyProperty
每次Btn_LeaderB_Click
调用该方法时增加该值,您可以进一步将其扩展为:
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);
}
推荐阅读
- c# - Chrome 未设置会话的 Cookie
- javascript - keep getting empty result on my previous promise
- angular - 如何防止 Angular 工作区中的跨项目?
- ruby-on-rails - Poro 的 FactoryBot 工厂导致未定义的方法“构建”
- python - 导入自己的包和模块的问题
- list - 使用的最佳数据结构
- python - 根据列表中列的值过滤熊猫数据框列
- python - 使用 SSH 的 Python MySQL 连接
- javascript - 如何使用 CSS 样式使文本看起来像密码?
- php - 读取文本文件后创建 Json 数据