从asp.net中的arraylist转移元素

时间:2014-02-19 06:51:00

标签: c# asp.net arrays sorting arraylist

我有一个项目,我坚持这件事。我想在html表中只在三行中显示页面上的警报。目前我有三个表但我想要多个table4,table5 table6等。

这是我项目的代码:

public ArrayList myArr = new ArrayList();

public static string alarma_valoare { get; set; }
public static string alarma_denumire_punct { get; set; }
public static string alarma_timp  { get; set; }
public static string alarma_mesaj { get; set; }


protected void Page_Load(object sender, EventArgs e)
{
    PresSelect();
    TempSelect();
    DebSelect();
    DataDisplay();
}

public void PresSelect()
{

    string query = "String table1";

    dt = GetData(query);

    if (dt.Rows.Count > 0)
    {
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            alarm_value = dt.Rows[i]["value"].ToString();
            alarm_n = dt.Rows[i]["value1"].ToString();
            alarma_date = dt.Rows[i]["value2"].ToString();
            alarma_text = dt.Rows[i]["value3"].ToString();



           if (float.Parse(alarm_value) > 11)
            {

                myAr.Add(float.Parse(alarm_value));
                myAr.Add(alarm_n.ToString());
                myAr.Add(alarma_date.ToString());
                myAr.Add(alarma_text.ToString());



            }
            else if (float.Parse(alarm_value) < 11)
            {

                myAr.Add(float.Parse(alarm_value));
                myAr.Add(alarm_n.ToString());
                myAr.Add(alarma_date.ToString());
                myAr.Add(alarma_text.ToString());
            }
         }
    }
}

public void TempSelect()
{

    string query = "string  table2";

    dt = GetData(query);

    if (dt.Rows.Count > 0)
    {
        for (int j = 0; j < dt.Rows.Count; j++)
        {

            alarm_value = dt.Rows[j]["value"].ToString();             
            alarm_n = dt.Rows[j]["value1"].ToString();
            alarma_date = dt.Rows[j]["value2"].ToString();
            alarma_text = dt.Rows[j]["value3"].ToString();

             if (float.Parse(alarm_value) > 22)
            {

                myAr.Add(float.Parse(alarm_value));
                myAr.Add(alarm_n.ToString());
                myAr.Add(alarma_date.ToString());
                myAr.Add(alarma_text.ToString());
            }
            else if (float.Parse(alarm_value) < 22)
           {
                myAr.Add(float.Parse(alarm_value));
                myAr.Add(alarm_n.ToString());
                myAr.Add(alarma_date.ToString());
                myAr.Add(alarma_text.ToString());
            }
        }
    }

}

public void DebSelect()
{

    string query = "String table3";

    dt = GetData(query);

    if (dt.Rows.Count > 0)
    {
        for (int y = 0; y < dt.Rows.Count; y++)
        {


             alarm_n = dt.Rows[y]["value1"].ToString();
             alarma_date = dt.Rows[y]["value2"].ToString();
             alarma_text = dt.Rows[y]["value3"].ToString();

            if (float.Parse(alarm_value) >33)
            {

                    myAr.Add(float.Parse(alarm_value));
                    myAr.Add(alarm_n.ToString());
                    myAr.Add(alarma_date.ToString());
                    myAr.Add(alarma_text.ToString());
            }
            else if (float.Parse(alarm_value) < 33 )
            {

                myAr.Add(float.Parse(alarm_value));
                myAr.Add(alarm_n.ToString());
                myAr.Add(alarma_date.ToString());
                myAr.Add(alarma_text.ToString());
            }
        }
    }

}

public void DataDisplay()
{


    //in this function I want to display data in my html table

 }



private static DataTable GetData(string query)
{
    DataTable dt = new DataTable();
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {

        using (SqlCommand cmd = new SqlCommand(query))
        {
            cmd.CommandTimeout = 0;
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.CommandType = CommandType.Text;
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                sda.Fill(dt);

            }
        }

        return dt;
    }
    SqlConnection.ClearAllPools();
}               

我将这些表中的所有值都放在这个数组中,如下所示:

[0]  value - from table1
[1]  value1 - from table1
[2]  value2 - from table1
[3]  value3 - from table1

[4]  value - from table2
[5]  value1 - from table2
[6]  value2 - from table2
[7]  value3 - from table2

[8]  value - from table3
[9]  value1 - from table3
[10] value2 - from table3
[11] value3 - from table3

结束我想在这样的html表格中显示:

Value/name                Date                           Message   
value/value1(T1)        value2(T1)                       value3(T1)
value/value1(T2)        value2(T2)                       value3(T2)
value/value1(T3)        value2(T3)                       value3(T3)

当在数据库中为table3我的数组提供一个新值时,我希望看起来像这样:

 [0]  value - from table3
 [1]  value - from table3
 [2]  value - from table3
 [3]  value - from table3

 [4]  value - from table1
 [5]  value - from table1
 [6]  value - from table1
 [7]  value - from table1

 [8]  value - from table2
 [9]  value - from table2
 [10] value - from table2
 [11] value - from table2

 Value/name                Date                           Message   
 value/value1(T3)        value2(T3)                       value3(T3)
 value/value1(T1)        value2(T1)                       value3(T1)
 value/value1(T2)        value2(T2)                       value3(T2)

来自table2的另一个值

  [0]  value - from table2
  [1]  value - from table2
  [2]  value - from table2
  [3]  value - from table2

  [4]  value - from table3
  [5]  value - from table3
  [6]  value - from table3
  [7]  value - from table3

  [8]  value - from table1
  [9]  value - from table1
  [10] value - from table1
  [11] value - from table1

  Value/name                Date                           Message   
 value/value1(T2)        value2(T2)                       value3(T2)
 value/value1(T3)        value2(T3)                       value3(T3)
 value/value1(T1)        value2(T1)                       value3(T1)

我想移动myArrraylist中的元素并在html表中显示这是我想要在这个时刻为我的数据库中的三个表做,但将来我有多个表。

抱歉我的英文不好,如果不明白我会尽力解释。

2 个答案:

答案 0 :(得分:0)

我认为您可以使用队列。

让我解释一下。如果你有一个队列(你可以做一些检查,总是有12个元素),你开始排队值,你会有这样的事情:

  [11]  value - from table3
  [10]  value - from table3
  [9]  value - from table3
  [8]  value - from table3

  [7]  value - from table2
  [6]  value - from table2
  [5]  value - from table2
  [4]  value - from table2

  [3]  value - from table1
  [2]  value - from table1
  [1] value - from table1
  [0] value - from table1
//First element

然后,如果你得到一个新值:

使用Dequeue()4次,你会得到这个:

  [7]  value - from table3
  [6]  value - from table3
  [5]  value - from table3
  [4]  value - from table3

  [3]  value - from table2
  [2]  value - from table2
  [1]  value - from table2
  [0]  value - from table2
//First element

然后使用Enqueue()和四个新值,你会得到类似的东西:

  [11]  value - from table4
  [10]  value - from table4
  [9]  value - from table4
  [8]  value - from table4

  [7]  value - from table3
  [6]  value - from table3
  [5]  value - from table3
  [4]  value - from table3

  [3]  value - from table2
  [2]  value - from table2
  [1] value - from table2
  [0] value - from table2
    //First element

得到它? ;) 我认为这可以解决您的问题!

这个想法:

Queue<string> queue = new Queue<string>();

            queue.Enqueue("prueba1");
            queue.Enqueue("prueba2");
            queue.Enqueue("prueba3");
            queue.Enqueue("prueba4");

            queue.Enqueue("prueba5");
            queue.Enqueue("prueba6");
            queue.Enqueue("prueba7");
            queue.Enqueue("prueba8");

            queue.Enqueue("prueba9");
            queue.Enqueue("prueba10");
            queue.Enqueue("prueba11");
            queue.Enqueue("prueba12");

            if (queue.Count == 12)
            {
                queue.Dequeue();
                queue.Dequeue();
                queue.Dequeue();
                queue.Dequeue();
                queue.Enqueue("prueba13");
                queue.Enqueue("prueba14");
                queue.Enqueue("prueba15");
                queue.Enqueue("prueba16");
            }

答案 1 :(得分:0)

我不会为此使用ArrayList。创建一个类来保存数据并为其提供有意义的属性名称。然后,您可以更改GetData方法,以提供这些类的集合,您可以在表示逻辑中使用这些类来填充HTML表。

可能类似以下

class AlarmData {

    public float AlarmValue { get; set; }
    public string AlarmN { get; set; }
    public string AlarmDate { get; set; } // Could even be of type DateTime
    public string AlarmText { get; set; }

}

DebSelectTempSelectPresSelect方法中,您有很多重复的代码。也许将很多内容移到你的GetData方法中,而不是填充arraylist创建一个AlarmData对象的集合并返回它们。

然后,您的DebSelectTempSelectPresSelect方法可以简单地对返回的数据执行条件逻辑。

对于DataDisplay方法,我会调查ASP.NET Repeater Control来构建ASP.NET表或DIVS,或者您选择用于布局内容的任何方法。如果您真的想要,可以查看与自定义业务对象(AlarmData)的数据绑定,以帮助进一步简化操作。

这与你原来的例子相差甚远,但这可能是我建议的一个值得的。