0

私は c# asp.net と c# を使用しており、ドロップダウンリストボックスを使用して amchart をフィルタリングしようとしています。しかし、何を選択しても、最初の要素の値を取得します。!ispostback を試しましたが、うまくいきませんでした。次はフロントエンド コードです。

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default"  EnableEventValidation = "false" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

    <head>


        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>amCharts examples</title>
        <link rel="stylesheet" href="http://localhost/style1.css" type="text/css">
        <script src="http://localhost/amcharts.js" type="text/javascript"></script>         
        <script type="text/javascript">

            var chart;

            var chartData = JSON.parse('<%=sjson%>'); 

            AmCharts.ready(function () {
                // SERIAL CHART
                chart = new AmCharts.AmSerialChart();
                chart.dataProvider = chartData;
                chart.categoryField = "Ip";
                chart.startDuration = 1;

                //scrollbar definition
                var chartScrollbar = new AmCharts.ChartScrollbar();

                // AXES
                // category
                var categoryAxis = chart.categoryAxis;
                categoryAxis.labelRotation = 90;
                categoryAxis.gridPosition = "Count";

                // value
                // in case you don't want to change default settings of value axis,
                // you don't need to create it, as one value axis is created automatically.

                // GRAPH
                var graph = new AmCharts.AmGraph();
                graph.valueField = "Count";
                graph.balloonText = "[[category]]: [[value]]";
                graph.type = "column";
                graph.lineAlpha = 0;
                graph.fillAlphas = 0.8;

                //add scrollbar to graph
                chartScrollbar.graph = graph;
                chartScrollbar.scrollbarHeight = 40;
                chartScrollbar.color = "#000000";
                chartScrollbar.autoGridCount = true;
                chart.addChartScrollbar(chartScrollbar);

                chart.addGraph(graph);

                chart.write("chartdiv");
            });
        </script>

    </head>

    <body>
        <form id="form1" runat="server">
        <div id="chartdiv" style="width: 100%; height: 400px;"></div>
        <div>
            <asp:DropDownList ID="DropDownListISP" runat="server" AutoPostBack="True" 
                onselectedindexchanged="DropDownListISP_SelectedIndexChanged">
            </asp:DropDownList>
        </div>
        </form>
    </body>

</html>

そして、以下は私のコードビハインドです、

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using MySql.Data.MySqlClient;
using System.Data;

public partial class Default : System.Web.UI.Page
{
    public string sjson;
    string connStr = "server=localhost;Database=db_tav;Uid=root;Pwd=pass;";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) { 
            populateList();
            filterData("etisalat");
        }

    }
    private void populateList() {
        MySqlConnection connPopulate = new MySqlConnection(connStr);

        connPopulate.Open();
        MySqlCommand cmd = new MySqlCommand();

        cmd = connPopulate.CreateCommand();
        cmd.CommandText = "SELECT DISTINCT isp FROM tbl_correlateTest WHERE isp !=''";//

        MySqlDataReader ddlValues;
        ddlValues = cmd.ExecuteReader();

        DropDownListISP.DataSource = ddlValues;
        DropDownListISP.DataValueField = "isp";
        DropDownListISP.DataTextField = "isp";
        DropDownListISP.DataBind();

        connPopulate.Close();
        cmd.Connection.Close();
        cmd.Connection.Dispose();
    }
    private void filterData(string isp) {
        MySqlConnection conn = new MySqlConnection(connStr);

        conn.Open();

        MySqlCommand cmd = new MySqlCommand();

        cmd = conn.CreateCommand();
        cmd.CommandText = "SELECT IP, conLvl FROM tbl_correlateTest WHERE isp LIKE ?ispVal order by ip asc";//
        cmd.Prepare();
        cmd.Parameters.Add("?ispVal", MySqlDbType.VarChar, 100).Value = "%" + isp + "%";
        MySqlDataReader readIp = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        ArrayList conRc = new ArrayList();

        while (readIp.Read())
        {
            string ipVal = readIp.GetString(0);
            string conLvlVal = readIp.GetString(1);
            conRc.Add(new Confidence(ipVal, conLvlVal));

        }

        System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        sjson = oSerializer.Serialize(conRc);

        conn.Close();        
    }
    protected void DropDownListISP_SelectedIndexChanged(object sender, EventArgs e)
    {
        string isp = DropDownListISP.SelectedValue.ToString();
        isp = isp.Trim();
        filterData(isp);
    }

}

これについて私を助けてください、私はできる限りのことを試しましたが、このリストボックスは常に最初の値を返します:(どうもありがとう.. :)


編集:

データバインドの代わりに以下を実行すると、選択したアイテムの値を取得できます。

    MySqlDataReader readIsp = cmd.ExecuteReader(CommandBehavior.CloseConnection);

    while (readIsp.Read())
    {
        string ispVal = readIsp.GetString(0);
        ispVal = ispVal.Trim();
        DropDownListISP.Items.Add(ispVal);

    }

問題は何ですか?? 情報のためだけに.. :)

4

1 に答える 1

0

データのバインドが問題を引き起こし、アイテムの追加が問題を引き起こしている場合、それpopulateListは呼び出されていることを意味し、ドロップダウンが再度バインドされると、前の選択が洗い流されます。メソッドにブレークポイントを設定しpopulateList、ドロップダウンからポストバックを実行したときにヒットするかどうかを確認します。

于 2012-09-04T11:16:16.587 に答える