我们可以将数据分组在ASP WebForm中的ASP转发器中吗

sriram0212

成员
已加入
2020年6月20日
留言内容
8
编程经验
1-3
我们可以将一个asp中继器中的单个列分组吗,我需要将在每行中显示相同音素的phonemumber列进行分组,因此我需要将音素单独编码:
电话号码
<#DataBinder.Eval(Container.DataItem,"PhoneNumber")>
VOIP用户名VOIP密码SIP代理SIP注册器西普里
<#DataBinder.Eval(Container.DataItem,"VOIPUsername")><#DataBinder.Eval(Container.DataItem,"VOIPPassword")><#DataBinder.Eval(Container.DataItem,"SIPProxy")><#DataBinder.Eval(Container.DataItem,"SIPRegistrar")><#DataBinder.Eval(Container.DataItem,"SIPURI")>
电话号码
<#DataBinder.Eval(Container.DataItem,"PhoneNumber")>
VOIP用户名VOIP密码SIP代理SIP注册器西普里
<#DataBinder.Eval(Container.DataItem,"VOIPUsername")>
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,536
地点
弗吉尼亚州切萨皮克
编程经验
10+
不在用户界面(例如,Asp Repeater级别)。您应该在模型或视图模型中进行分组。
 

sriram0212

成员
已加入
2020年6月20日
留言内容
8
编程经验
1-3
不在用户界面(例如,Asp Repeater级别)。您应该在模型或视图模型中进行分组。


如果是这种情况,可以在此处进行更改:
C#:
OrderVOIP message;
                    List<OrderVOIP> messages = new List<OrderVOIP>();

                    OracleConnection conn = null;
                    conn = new OracleConnection(ConfigurationManager.AppSettings["NHibernateOverride.connection.connection_string"]);
                    conn.Open();
                    OracleCommand cmd1 = conn.CreateCommand();
                    cmd1.Connection = conn;
                    cmd1.CommandText = "Select PHONENUMBER,VOIP_USERNAME,VOIP_PASSWORD,SIP_PROXY,SIP_REGISTRAR,SIP_URI,NEW_PHONENUMBER,PHONENUMBER_STATUS from  EDGE_OMNIA.ORDER_VOIP where salesorderid=:salesorderid ORDER BY ID DESC";
                    cmd1.CommandType = CommandType.Text;
                    cmd1.Parameters.Add("salesorderid", salesOrderId);
                    //cmd1.Parameters.Add("phonenumber", phonenumber);
                    cmd1.ExecuteNonQuery();

                    OracleDataReader dr1 = null;
                    dr1 = cmd1.ExecuteReader();

                    while (dr1.Read())
                    {
                        message = new OrderVOIP();
                        string id = dr1[0].ToString();
                        message.PhoneNumber = dr1[0].ToString();
                        message.VOIPUsername = dr1[1].ToString();
                        message.VOIPPassword = dr1[2].ToString();
                        message.SIPProxy = dr1[3].ToString();
                        message.SIPRegistrar = dr1[4].ToString();
                        message.SIPURI = dr1[5].ToString();
                       
                        message.New_PhoneNumber = dr1[6].ToString();
                        message.PhoneNumberStatus = dr1[7].ToString();
                        if(message.PhoneNumberStatus == "RENUMBER")
                        {
                            message.PhoneNumber = message.New_PhoneNumber;
                        }
                        messages.Add(message);

                }
                    dr1.Close();
                    conn.Close();
                    if (messages.Count > 0)
                    {
                        RepviewVOIPDetails.DataSource = messages;
                        RepviewVOIPDetails.DataBind();

                    }
                }
                catch (OracleException ex)
                {
  
                }
            }
        }
 
由主持人最后编辑:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,536
地点
弗吉尼亚州切萨皮克
编程经验
10+
请将来将您的代码放入代码标签中。我是为你做的……或者至少要尽我所能。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,536
地点
弗吉尼亚州切萨皮克
编程经验
10+
为什么要使用WebForms直接在ADO.NET上使用?只需要确保您有可用的LINQ就可以使用它。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,536
地点
弗吉尼亚州切萨皮克
编程经验
10+
对于您为什么选择使用WebForms和ADO.NET而不是使用带有某种ORM或Repository模式的MVC或SPA的原因,这仍然没有答案。

但是要回答有关将内容收集到缓冲区并合并的问题,您当然可以做到。我之所以问有关LINQ的原因是,您可以使用现成的LINQ来为您进行分组,或者您可以自己使用而不使用LINQ。

但是使用LINQ要求您在.NET 3.5或更高版本上运行。如果由于强制使用旧版本的.NET Framework而使用WebForms和ADO.NET,则肯定必须自己做一些事情。
 

sriram0212

成员
已加入
2020年6月20日
留言内容
8
编程经验
1-3
对于您为什么选择使用WebForms和ADO.NET而不是使用带有某种ORM或Repository模式的MVC或SPA的原因,这仍然没有答案。

但是要回答有关将内容收集到缓冲区并合并的问题,您当然可以做到。我之所以问有关LINQ的原因是,您可以使用现成的LINQ来为您进行分组,或者您可以自己使用而不使用LINQ。

但是使用LINQ要求您在.NET 3.5或更高版本上运行。如果由于强制使用旧版本的.NET Framework而使用WebForms和ADO.NET,则肯定必须自己做一些事情。


是的,我需要坚持这一点,因为它是一个巨大的应用程序,如果我重新创建某些内容,它将影响其他依赖项,所以有什么想法要提出,我一定会尝试一下
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,536
地点
弗吉尼亚州切萨皮克
编程经验
10+
好了,这是您需要做什么的粗略概述。
Step 1: Change your SQL query to have it use GROUP BY so that your ADO.NET query gives you back the data already grouped by the phone number. (You'll still want the phone number as part of the selected columns, though.)

步骤2:您将要创建一个类似于以下内容的类:
C#:
class PhoneNumberGroup
{
    public string PhoneNumber { get; set; }
    public IEnumerable<OrderVOIP> Orders { get; set; }
}

Step 3: You'll need to structure your reads from the OracleDataReader to something like this pseudo-code:
C#:
groups = new List<PhoneNumberGroup>();
group = null;
while (reader.Next())
{
    if (group == null || reader["PhoneNumber"] != group.PhoneNumber)
    {
        group = new PhoneNumberGroup();
        group.PhoneNumber = reader["PhoneNumber"];
        group.Orders = new List<OrderVOIP>();
        groups.Add(group);
    }

    // your code to populate an OrderVOIP here.

    group.Add(orderVOIP);
}

Step 4: Pass on that groups list unto the repeater.

步骤5:在UI上进行设置,以便拥有两个转发器。总体结构应类似于:
C#:
Repeater that iterates over the groups list
<table>
    for each group found render:
    <tr>
        <td>
            <h2>bind to group.PhoneNumber</h2>
            Repeater that iterates over group.Orders list
            <table>
                foreach order found render:
                <tr>
                    <td>bind to order.UserName</td>
                    <td>bind to order.Password</td>
                    :
                </tr>
            </table>
        </td>
    </tr>
</table>

我希望能给您一个大致的想法。
 
最佳 底部