C# 如何将DataTable绑定到MS图表
这是myCode:C# 如何将DataTable绑定到MS图表,c#,sql,.net,charts,mschart,C#,Sql,.net,Charts,Mschart,这是myCode: private void frmChart_Load(object sender, EventArgs e) { string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString; using (SqlConnection Con = new SqlConnection(cs)) { SqlCommand cm
private void frmChart_Load(object sender, EventArgs e)
{
string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
using (SqlConnection Con = new SqlConnection(cs))
{
SqlCommand cmdSum = new SqlCommand("Select distinct(UserName),sum(Value) from mytable group by UserName",Con);
Con.Open();
SqlDataReader reader = cmdSum.ExecuteReader();
chart1.DataBindTable(reader,"sum(Value)");
}
foreach (Series series in chart1.Series)
{
series.CustomProperties = "DrawingStyle=LightToDark";
}
}
它显示了chart1.DatabindTable中的一个错误。我还尝试了另一种方法,但无法处理。将值检查到reader中。。如果你有价值观 试着替换
chart1.DataBindTable(reader,"sum(Value)");
与
一旦您将值汇总到查询中,就不必再次提及sum,您的Value参数将具有sum
编辑---更新代码
private void frmChart_Load(object sender, EventArgs e)
{
string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
using (SqlConnection Con = new SqlConnection(cs))
{
SqlCommand cmdSum = new SqlCommand("Select distinct(UserName),sum(Value) from mytable group by UserName", Con);
Con.Open();
SqlDataReader reader = cmdSum.ExecuteReader();
while (reader.Read())
{
chart1.DataBindTable(reader, reader["Value"]);
}
}
foreach (Series series in chart1.Series)
{
series.CustomProperties = "DrawingStyle=LightToDark";
}
}
将您的值签入读卡器。。如果你有价值观 试着替换
chart1.DataBindTable(reader,"sum(Value)");
与
一旦您将值汇总到查询中,就不必再次提及sum,您的Value参数将具有sum
编辑---更新代码
private void frmChart_Load(object sender, EventArgs e)
{
string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
using (SqlConnection Con = new SqlConnection(cs))
{
SqlCommand cmdSum = new SqlCommand("Select distinct(UserName),sum(Value) from mytable group by UserName", Con);
Con.Open();
SqlDataReader reader = cmdSum.ExecuteReader();
while (reader.Read())
{
chart1.DataBindTable(reader, reader["Value"]);
}
}
foreach (Series series in chart1.Series)
{
series.CustomProperties = "DrawingStyle=LightToDark";
}
}
如果您只想绑定一个数据表,那么只需执行以下操作:
private void Form1_Load(object sender, EventArgs e)
{
string sql = "your sql here";
SqlDataAdapter adapter = new SqlDataAdapter(sql, connectionString);
DataTable dt = new DataTable();
adapter.Fill(dt);
chart1.DataBindTable(dt.DefaultView, "UserName");
}
注意:调用
DataBindTable
时,必须使用“用户名”(xField
)。不是Value
或Sum(Value)
如果您只想绑定一个数据表,那么只需执行以下操作:
private void Form1_Load(object sender, EventArgs e)
{
string sql = "your sql here";
SqlDataAdapter adapter = new SqlDataAdapter(sql, connectionString);
DataTable dt = new DataTable();
adapter.Fill(dt);
chart1.DataBindTable(dt.DefaultView, "UserName");
}
注意:调用
DataBindTable
时,必须使用“用户名”(xField
)。不是Value
或Sum(Value)
向我们准确地显示错误是什么将有助于我们帮助您。首先,我要检查要绑定到的列的确切名称。是否要为每个不同的用户绘制一个值?@MongZhu是的,这是真的。@PaulF System.Windows.Forms.DataVisualization.dll中出现“System.ArgumentOutOfRangeException”类型的未处理异常。其他信息:数据点插入错误。只能为此数据设置1个Y值series@MongZhu:如果查看SqlDataReader的文档,您将看到它是从实现IEnumerable的DbDataReader派生的。您可以通过“bool isEnumerable=typeof(IEnumerable).IsAssignableFrom(typeof(SqlDataReader));”来确认,向我们显示错误的确切内容将对您有所帮助。首先,我要检查要绑定到的列的确切名称。是否要为每个不同的用户绘制一个值?@MongZhu是的,这是真的。@PaulF System.Windows.Forms.DataVisualization.dll中出现“System.ArgumentOutOfRangeException”类型的未处理异常。其他信息:数据点插入错误。只能为此数据设置1个Y值series@MongZhu:如果查看SqlDataReader的文档,您将看到它是从实现IEnumerable的DbDataReader派生的。您可以用“bool IsEnumerable=typeof(IEnumerable).IsAssignableFrom(typeof(SqlDataReader));”确认输出是什么?您使用的是哪个图表和c#what widows/wpf web?我在windows窗体app中添加了一个列图表。它不起作用,它显示了关于argument2的另一个错误,无法从对象转换为字符串。我使用tostring()来,但它没有用。那么输出是什么?您使用的是哪个图表和c#what widows/wpf web?我在windows窗体app中添加了一个列图表。它不起作用,它显示了argument2的另一个错误,无法从对象转换为字符串。我使用tostring()来,但它没有用。例如,如果我有两列而不是一列,我有Sender列和Receiver列,我想显示它的值。是否可以使用上述代码?如果这是真的,我将非常感谢您的帮助,因为我对上述代码做了一些更改,但我无法得到结果。如果您想在同一个图表中显示发送方和接收方,那么您将需要两个单独的系列,然后将它们分别绑定DataBindTable
无法为您执行此操作,它只能将一个表绑定到一个系列,这是默认系列。你最好把这个新的特定场景作为一个新问题发布出来。如果您还没有这样做,请阅读如何提出一个好问题,这样会有很多人试图帮助您。具体来说,您必须这样做:chart1.Series[0].Points.DataBind();chart1.Series[1]。Points.DataBind()
您可以看到DataBind()
的文档,这与DataBindTable
非常相似。如果我有两列而不是一列,例如,我没有用户名,而是有发送者列和接收者列,我想显示它的值。是否可以使用上述代码?如果这是真的,我将非常感谢您的帮助,因为我对上述代码做了一些更改,但我无法得到结果。如果您想在同一个图表中显示发送方和接收方,那么您将需要两个单独的系列,然后将它们分别绑定DataBindTable
无法为您执行此操作,它只能将一个表绑定到一个系列,这是默认系列。你最好把这个新的特定场景作为一个新问题发布出来。如果您还没有这样做,请阅读如何提出一个好问题,这样会有很多人试图帮助您。具体来说,您必须这样做:chart1.Series[0].Points.DataBind();chart1.Series[1]。Points.DataBind()
您可以看到DataBind()
的文档,它与DataBindTable
非常相似。