Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否将列中存储的所有值显示到标签?_C#_Sql_Wpf - Fatal编程技术网

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()连接到数据库,查看表中的值