例如,当我单击David点图时(如图所示,在David的蓝色区域),我想在MessageBox上获得StaffId
。
我是指点击的员工姓名中的StaffId
。
这是我的系列演讲。
var series = chart1.Series.Add("Series1");
series.XValueMember = "StaffId";
series.YValueMembers = "Total";
series.Name = "Employee";
和我正在使用的Linq查询
var result = (from u in db.Transactions
join st in db.Users on u.StaffId equals st.UserId
group u by u.Users.FirstName into g
select new
{
StaffId = g.Key,
Total = g.Count()
}).ToList();
chart1.DataSource = result;
chart1.DataBind();
chart1.Show();
我尝试过这种方法,但是不起作用
private void chart1_MouseClick(object sender, MouseEventArgs e)
{
// Totally stop here .. ;)
}
答案 0 :(得分:1)
尝试MouseUp事件:
private void chart1_MouseUp(object sender, MouseEventArgs e)
{
var pointEndX = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
var pointEndY = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
}
因此完整的代码如下:
public partial class Form1 : Form
{
class User
{
public string StaffId { get; set; }
public int Total { get; set; }
}
public Form1()
{
InitializeComponent();
chart1.Series.Clear();
var series = chart1.Series.Add("Series1");
series.XValueMember = "StaffId";
series.YValueMembers = "Total";
series.Name = "Employee";
var users = new List<User>();
users.Add(new User(){StaffId = "John", Total = 70});
users.Add(new User() { StaffId = "David", Total = 81 });
users.Add(new User() { StaffId = "Sara", Total = 81 });
chart1.DataSource = users;
chart1.DataBind();
chart1.Show();
}
private void chart1_MouseUp(object sender, MouseEventArgs e)
{
var pointEndX = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
var list = (List<User>)chart1.DataSource;
//round to the nearest whole number
pointEndX = Math.Round(pointEndX, 0);
//subtract 1 because bars start at 1 and List/Array are 0 indexed
int index = ((int)pointEndX )- 1;
if(index <0 || index>=list.Count)
return;
var user = list[index];
MessageBox.Show(user.StaffId);
}
}