C# 是否将列中存储的所有值显示到标签?
我有一个名为C# 是否将列中存储的所有值显示到标签?,c#,sql,wpf,C#,Sql,Wpf,我有一个名为T_Score的表和名为Team1的列,它有一些存储的值,我希望这些值被添加并显示在标签上 这是在表中存储值的代码: private void Btn\u LeaderB\u单击(对象发送者,路由目标) { 这个.NavigationService.Navigate(新排行榜()); SqlConnection conne=新的SqlConnection(@“数据源=笔记本电脑-S2J1U9SJ\SQLEXPRESS;初始目录=单元4_IT;集成安全性=真”); conne.Open
T_Score
的表和名为Team1
的列,它有一些存储的值,我希望这些值被添加并显示在标签上
这是在表中存储值的代码:
private void Btn\u LeaderB\u单击(对象发送者,路由目标)
{
这个.NavigationService.Navigate(新排行榜());
SqlConnection conne=新的SqlConnection(@“数据源=笔记本电脑-S2J1U9SJ\SQLEXPRESS;初始目录=单元4_IT;集成安全性=真”);
conne.Open();
string insertQuery=“插入T_分数(团队1)”+
“价值观(@Team1)”;
SqlCommand com=新的SqlCommand(插入查询,连接);
com.Parameters.AddWithValue(“@Team1”,txt\u score4\u tm1.Text);
com.ExecuteNonQuery();
conne.Close();
}
此代码存储需要与上一个值相加的值。使用以下查询
从T_分数中选择总和(Team1)而不是cmd.ExecuteNonQuery()代码>使用cmd.ExecuteScalar()
并使用方法的返回值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
的标签才能工作。
它试图将Convert.ToString(com.ExecuteScalar())
的结果写入所述标签的内容属性
您还可以使用TextBlock
和Text
属性,因此此行:
textBlock1.Text = Convert.ToString(com.ExecuteScalar());
注意而不是调用conne.Close()
手动,我使用
语句将SqlConnection conne
包装成一个,这应该总是通过继承自IDisposable
的对象来完成
您可以在此处阅读IDisposable
和using
语句:
如果IEnumerable
对象(例如列表)中已有值,则只需执行以下操作
使用一个简单的循环:
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;
var sumOfValue = 0;
foreach (var myValue in myValues)
sumOfValue += myValue.Value;
如果您没有int
的IEnumerable
,而是类,那么您的代码将如下所示
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
//Label
label1.Content = sumOfValue.ToString();
//or TextBlock
textBlock1.Text = sumOfValue.ToString();
public partial class LeaderBoard : Page
{
//stuff...
}
public void Foo()
{
textBlock1.Text = Convert.ToString(this.MyProperty);
}
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);
}
使用LINQ
:
var myValues = new List<int>() { 1, 2, 3, 4, 5, 6 }; //<- list with temporary data
var sumOfValue = myValues.Sum();
var sumOfValue = myValues.Sum(x => x.Value);
在所有这些情况下,您必须像这样将sumOfValue
写入Label
或TextBlock
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
//Label
label1.Content = sumOfValue.ToString();
//or TextBlock
textBlock1.Text = sumOfValue.ToString();
public partial class LeaderBoard : Page
{
//stuff...
}
public void Foo()
{
textBlock1.Text = Convert.ToString(this.MyProperty);
}
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);
}
要将值传递到不同的页面,只需执行以下操作
在代码隐藏中搜索您的页面,例如排行榜
。
应该是这样的
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
//Label
label1.Content = sumOfValue.ToString();
//or TextBlock
textBlock1.Text = sumOfValue.ToString();
public partial class LeaderBoard : Page
{
//stuff...
}
public void Foo()
{
textBlock1.Text = Convert.ToString(this.MyProperty);
}
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);
}
将新属性添加到此类
public partial class LeaderBoard : Page
{
public int MyProperty { get; set; }
//stuff...
}
当您初始化排行榜时,如此处
this.NavigationService.Navigate(new LeaderBoard());
将初始化更改为:
this.NavigationService.Navigate(new LeaderBoard() { MyProperty = 7187, });
7187
是一个随机数,需要填入您需要的内容
这样,您就可以将数据“传输”到排行榜
,并且可以在排行榜
中访问新属性及其值。例如,可能有这样的方法
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
//Label
label1.Content = sumOfValue.ToString();
//or TextBlock
textBlock1.Text = sumOfValue.ToString();
public partial class LeaderBoard : Page
{
//stuff...
}
public void Foo()
{
textBlock1.Text = Convert.ToString(this.MyProperty);
}
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);
}
该类将看起来像这样:
public partial class LeaderBoard : Page
{
public int MyProperty { get; set; }
//stuff...
public void Foo()
{
textBlock1.Text = Convert.ToString(this.MyProperty);
}
}
如果您需要在排行榜
打开时从其他位置更改MyProperty
,请保留您创建的参考
要保留引用,请更改此行
this.NavigationService.Navigate(new LeaderBoard() { MyProperty = 7187, });
对此
_leaderBoard = new LeaderBoard() { MyProperty = 7187, };
this.NavigationService.Navigate(_leaderBoard);
并在外部范围内创建一个字段,如下所示
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
//Label
label1.Content = sumOfValue.ToString();
//or TextBlock
textBlock1.Text = sumOfValue.ToString();
public partial class LeaderBoard : Page
{
//stuff...
}
public void Foo()
{
textBlock1.Text = Convert.ToString(this.MyProperty);
}
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);
}
这样,\u排行榜
字段将只初始化一次。
如果每次调用Btn\u LeaderB\u 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);
}
您面临的问题是什么,到目前为止您尝试了什么?@20我不知道如何真正实现它,但我猜测需要使用SUM。如果我们也有值的数据类型,这会有所帮助。您需要1)添加值,2)从数据库返回数据,3)在标签中显示数据。(1和2可以按任意顺序进行)。哪一位给你带来了困难?@two-Its-integer。为什么文本给我一个错误和insertQuery,或者我假设insertQuery应该被选择的更改?它几乎可以工作,只是没有加上列中的值。@MarkMihailovs-编辑我的答案以澄清标签1.Text
并用insertQuery
@MarkMihailovs-关于您的问题,我的代码没有生成求和,这不可能,因为SQL
查询中的sum(Team1)
将对Team1
列中的所有值求和。确保数据库中的值正确。例如,使用SQLServerManagementStudio()连接到数据库,查看表中的值