
نوشته شده توسط
پرستو پارسایی
در مورد مشکلی که در نمودار خود دارید، دلیل آن ممکن است این باشد که شما مقدار X را به عنوان یک رشته String به نمودار میدهید در حالی که محور X باید به عنوان یک محور زمانی (DateTime) تعریف شود. به همین دلیل، شکل نمودار شما به هم میریزد. برای رفع احتمالی مشکل در پروژه شما این کد را تست نمائید.
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
if (ismiddlebuttonclick)
{
label_VE.Visible = true;
label_HO.Visible = true;
label_VAL.Visible = true;
label_HO.Location = new Point(76, e.Y);
label_VE.Location = new Point(e.X, 21);
if (e.X <= 83 || e.Y >= 435 || e.Y <= 27 || e.X >= 852)
{
label_VE.Visible = false;
label_HO.Visible = false;
label_VAL.Visible = false;
}
else
{
label_VE.Visible = true;
label_HO.Visible = true;
label_VAL.Visible = true;
}
try
{
double yValue = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
string xString = chart1.Series[0].Points[(int)Math.Round(chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X))].AxisLabel;
DateTime xValue = DateTime.ParseExact(xString, "yyyy-MM-dd", CultureInfo.InvariantCulture);
chart1.Series[0].Points.AddXY(xValue, yValue);
label_VAL.Text = string.Concat(Math.Round(yValue, 1).ToString(), " , ", xValue.ToString());
label_VAL.Location = new Point(863, e.Y - 5);
}
catch (Exception ex)
{
MessageBox.Show("خطا در نشانگر: " + ex.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
else
{
label_VE.Visible = false;
label_HO.Visible = false;
label_VAL.Visible = false;
return;
}
}
ممنون از پاسخگویی شما ولی من داخل متد دیگه ای اطلاعات رو به نمودار فرستادم و درست هم فرستادم مشکل من اینه که اگر اطلاعات یه صورت String باشه شکل نمودار درسته ولی اگه بصورت DateTime باشه نمودار به هم میریزه
private void Draw_chart()
{
try
{
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
column.SortMode = DataGridViewColumnSortMode.NotSortable;
}
double xmax = chart1.ChartAreas["ChartArea1"].AxisX.Maximum;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[1].Value != null)
{
string a = row.Cells[1].Value.ToString();
string xValue = row.Cells[0].Value.ToString();
//xValue = xValue.Replace("/", "");
string yValue = row.Cells[2].Value.ToString();
string[] dateParts = xValue.Split('/');
int year = int.Parse(dateParts[0]);
int month = int.Parse(dateParts[1]);
int day = int.Parse(dateParts[2]);
PersianCalendar pc = new PersianCalendar();
DateTime date = pc.ToDateTime(year, month, day, 0, 0, 0, 0);
//double x = date.ToOADate();
string a1 = "ورود نقدینگی";
string a2 = "خروج نقدینگی";
if (a == a1)
{
chart1.Series["ورود نقدینگی"].Points.AddXY(date, yValue);
}
if (a == a2)
{
chart1.Series["خروج نقدینگی"].Points.AddXY(date, yValue);
}
}
}
chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoom(0, xmax);
}
catch (Exception ex)
{
MessageBox.Show("خطا در هنگام کشیدن نمودار" + ex.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.Close();
return;
}
}