【问题标题】:shifting elements from arraylist in asp.net在asp.net中从arraylist中移动元素
【发布时间】:2014-03-19 08:24:33
【问题描述】:

我有一个项目,我坚持做这件事。我想在 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)

我想移动 myArraylist 中的元素并显示在 html 表中,这是我现在想要为我的数据库中的三个表执行的操作,但将来我有多个表。

对不起,我的英语不好,如果不明白,我会尝试更好地解释。

【问题讨论】:

    标签: c# asp.net arrays sorting arraylist


    【解决方案1】:

    我认为你可以使用队列。

    让我解释一下。如果你有一个 Queue(你可以做一些检查以始终有 12 个元素)并且你开始对值进行 Enqueue,你会得到这样的东西:

      [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");
                }
    

    【讨论】:

    • 也许如果你为我的问题发布一个示例(一个想法),使用队列和出队来理解这个概念。
    • 我认为这很容易。创建队列。然后,在您实际上将元素“添加”到列表中的行中,检查您的 Queue 是否已经有 12 个元素,如果是,则首先 Dequeue() 四个元素,然后 Enqueue() 新元素,如果是未满且仍有空间,则仅将新元素排入队列。
    • 我在谷歌上搜索,我了解了这个概念。现在的问题是我现在不知道如何在我的 html 表中显示这个东西。对不起我的新手问题,但我不是程序员,但我必须完成这个项目
    • 抱歉,我不知道如何帮助您处理 Web 部件。我不是网络开发人员。很抱歉,但在这个问题上,我只能帮你解决这个问题。
    【解决方案2】:

    我不会为此使用 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 方法中,而不是填充数组列表,而是创建一个 AlarmData 对象的集合并返回这些对象。

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

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

    这与您的原始示例有很大的偏差,但我建议这样做可能是值得的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 2014-03-18
      • 2015-03-07
      相关资源
      最近更新 更多