2008-12-02 16 views
5

का उपयोग कर गतिशील चार्ट जोड़ें मैं वेबपृष्ठ में गतिशील चार्ट जोड़ना चाहता था। यह इस तरह जाता है ...एएसपी.NET चार्ट नियंत्रण, सी #

मुझे उपयोगकर्ता से प्रारंभ और समाप्ति तिथि मिलती है और शुरुआत और समाप्ति तिथि प्रत्येक तारीख के लिए अलग-अलग चार्ट खींचती है।

मैं एसक्यूएल डेटाबेस से डेटा मिलता है और इस तरह चार्ट के साथ यह बाँध:

SqlConnection UsageLogConn = new 
      SqlConnection(ConfigurationManager.ConnectionStrings["UsageConn"].ConnectionString); 
       UsageLogConn.Open();//open connection 

       string sql = "SELECT v.interval,dateadd(mi,(v.interval-1)*2,'" + startdate + " 00:00:00') as 'intervaltime',COUNT(Datediff(minute,'" + startdate + " 00:00:00',d.DateTime)/2) AS Total FROM usage_internet_intervals v left outer join (select * from Usage_Internet where " + name + " LIKE ('%" + value + "%') and DateTime BETWEEN '" + startdate + " 00:00:00' AND '" + enddate + " 23:59:59') d on v.interval = Datediff(minute,'" + startdate + " 00:00:00',d.DateTime)/2 GROUP BY v.interval,Datediff(minute,'" + startdate + " 00:00:00',d.DateTime)/2 ORDER BY Interval"; 

       SqlCommand cmd = new SqlCommand(sql, UsageLogConn); 
       SqlDataAdapter mySQLadapter = new SqlDataAdapter(cmd); 

       Chart1.DataSource = cmd; 

       // set series members names for the X and Y values 
       Chart1.Series["Series 1"].XValueMember = "intervaltime"; 
       Chart1.Series["Series 1"].YValueMembers = "Total"; 
       UsageLogConn.Close(); 
       // data bind to the selected data source 
       Chart1.DataBind(); 


       cmd.Dispose(); 

ऊपर कोड केवल एक तिथि के लिए एक चार्ट कहते हैं और मैं दृश्य डिजाइन और इसके नहीं करने के लिए 'चार्ट 1' को शामिल किया है गतिशील बनाया गया। लेकिन मैं वेबपेज पर रनटाइम पर गतिशील अधिक चार्ट जोड़ना चाहता था।

किसी को भी इस के साथ मेरी मदद कर सकते हैं?

मैं वीएस 2008, एएसपी.नेट 3.5 का उपयोग कर रहा हूं और चार्टिंग lib है: System.Web.UI.DataVisualization.Charting का उपयोग कर;

उत्तर

4

ठीक है तो मैंने इसे ओवरडोन कर दिया होगा, लेकिन मैंने यह सुंदर गतिशील बनाने की कोशिश की। हाँ, सूची के नाम थोड़ा अजीब हैं, लेकिन मैंने इसे बनाने के लिए मेरा एक और उदाहरण इस्तेमाल किया।

protected void Page_Load(object sender, EventArgs e) 
{ 
    Bench[] benchList; 
    FoodIntake[] foodIntakeList; 
    Panel panelChartHolder; 

    panelChartHolder = new Panel(); 
    Controls.Add(panelChartHolder); 

    benchList = Bench.GetAll(); 
    AddNewCharts(benchList, panelChartHolder, 
    GetBenchXValue, GetBenchYValue); 

    foodIntakeList = FoodIntake.GetAll(); 
    AddNewCharts(foodIntakeList, panelChartHolder, 
    GetFoodIntakeXValue, GetFoodIntakeYValue); 
    } 

ठीक है तो यह पहला हिस्सा सरल है। आपके द्वारा जोड़े जा रहे चार्ट को पकड़ने के लिए एक पैनल बनाएं, उन चार्टों को प्राप्त करें जिन्हें आप चार्ट द्वारा प्रतिनिधित्व करना चाहते हैं (इस उदाहरण के लिए वे लिंक से एसक्यूएल के साथ काम करते हैं) और चार्ट बनाने के लिए विधि को कॉल करें।

private void AddNewCharts<T>(T[] listToAdd, Panel panelToAddTo, 
    Func<T, DateTime> xMethod, Func<T, Int32> yMethod) 
    { 

    ChartArea mainArea; 
    Chart mainChart; 
    Series mainSeries; 

    mainChart = new Chart(); 
    mainSeries = new Series("MainSeries"); 

    for (Int32 loopCounter = 0; loopCounter < listToAdd.Length; loopCounter++) 
    { 
     mainSeries.Points.AddXY(xMethod(listToAdd[loopCounter]), 
     yMethod(listToAdd[loopCounter])); 
    } 

    mainChart.Series.Add(mainSeries); 
    mainArea = new ChartArea("MainArea"); 
    mainChart.ChartAreas.Add(mainArea); 

    panelToAddTo.Controls.Add(mainChart); 
    } 

आप देख सकते हैं, मैं सिर्फ एक नया चार्ट बनाया है, यह करने के लिए एक श्रृंखला जोड़ा है, और यह करने के लिए एक ChartArea गयी। अगला भाग संग्रह के माध्यम से बस लूपिंग कर रहा है और प्रत्येक आइटम को सूची में ही जोड़ रहा है। यह एक्स और वाई मान प्राप्त करने के लिए पास में प्रतिनिधि विधियों (Func) का उपयोग करता है।

अंतिम भाग में दो सूचियों से एक्स और वाई मान प्राप्त करने के लिए जिम्मेदार चार विधियां हैं। असल में मैंने चार्ट बनाने की विधि को यथासंभव सामान्य बनाने की अनुमति देने के लिए ऐसा किया। अधिक हो सकता है।

private DateTime GetBenchXValue(Bench currentBench) 
    { 
    return currentBench.DateLifted; 
    } 

    private Int32 GetBenchYValue(Bench currentBench) 
    { 
    return currentBench.BenchAmount; 
    } 

    private DateTime GetFoodIntakeXValue(FoodIntake currentIntake) 
    { 
    return currentIntake.DateEaten; 
    } 

    private Int32 GetFoodIntakeYValue(FoodIntake currentIntake) 
    { 
    return currentIntake.Calories; 
    } 

और इसलिए जब आप इसे चलाते हैं, तो आपको एक तरफ दो ग्राफ मिलेंगे। आपको याद है, वे बहुत सादे होंगे क्योंकि लाखों अलग-अलग गुण हैं जिन्हें देखने में सुधार करने के लिए सेट किया जा सकता है। आशा है कि आप यही पूछ रहे थे।

using System; 
    using System.Web.UI.DataVisualization.Charting; 
    using System.Web.UI.WebControls; 
+0

मैं एसक्यूएल उपयोग कर रहा हूँ और मैं इस लाइन के साथ समस्या हो रही है mainSeries.Points.AddXY ("intervaltime", "कुल"); जहां अंतराल, कुल एसक्यूएल चयन क्वेरी से आता है। –

+0

ईमानदारी से, ऐसा लगता है कि आपके पास ऊपर लिखा गया अन्य कोड है जिसे आप पहले से लिख चुके हैं। मैं बस जो किया, डेटाबेस के बजाय विधि में आदेश भेजता हूं, और फिर .XValueMember/.YValueMember सेट करता हूं। आपके पास अपने कोड में सबसे ज्यादा आवश्यकता है। –

+0

मेरी पोस्ट से लेने वाली मुख्य बात यह है कि चार्ट को गतिशील रूप से कैसे जोड़ना है। आपने पहले ही डाटाबेसिंग का पता लगाया है। –

0

मैं .NET 4.0 के लिए एमएस चार्ट नमूने अद्यतन और दो अतिरिक्त परियोजनाओं को शामिल किया है - ChartsWithMVC और ChartsWithoutWebForms। तुम मेरे नमूना कोड सहायक हो सकते हैं, के रूप में मैं एक गतिशील चार्ट प्रणाली asp.net चार्ट नियंत्रण का उपयोग करने का एक बहुत ही बुनियादी कार्यान्वयन है:

http://develocity.blogspot.com/2010/04/aspnet-chart-controls-without-web-forms.html

आशा है कि यह मदद करता है।

2
protected void Page_Load(object sender, EventArgs e) 
    { 
     MySqlConnection UsageLogConn = new MySqlConnection("Server=localhost;UID=root;Password=;database=productactivation"); 
     UsageLogConn.Open();//open connection 

     string sql = "select * from sales"; 
     DataSet ds = new DataSet(); 
     MySqlCommand cmd = new MySqlCommand(sql, UsageLogConn); 
     MySqlDataAdapter mySQLadapter = new MySqlDataAdapter(cmd); 
     mySQLadapter.Fill(ds); 
     Chart1.DataSource = ds; 

     // set series members names for the X and Y values 
     Chart1.Series["Series1"].XValueMember = "title_id"; 
     Chart1.Series["Series1"].YValueMembers = "qty"; 
     Chart1.Series["Series2"].XValueMember = "title_id"; 
     Chart1.Series["Series2"].YValueMembers = "qty"; 
     UsageLogConn.Close(); 
     // data bind to the selected data source 
     Chart1.DataBind(); 


     cmd.Dispose(); 

    } 
+0

दोनों डेटासोर्स और डेटासोर्सिड पर परिभाषित किए गए हैं इस लिंक ने मेरी मदद की: http://jibrankhan.wordpress.com/2008/06/18/both- डेटासोर्स- और- डेटासोर्सिड-are-defined-on-gridview1-remove-one परिभाषा-बाँध-बहु-datasources-टु-ए-gridview नियंत्रण / – dgamma3

संबंधित मुद्दे