分裂字符串的麻烦 - asp.net VB

时间:2013-05-28 14:02:48

标签: vb.net

我有一个大型数据库,其中每一行都有一个唯一的文档代码,然后是每个数量和每个成员/非成员的价格。即每个数量的价格为会员价格和非会员价格。 (会张贴一张照片,但显然我没有足够的声誉)。

无论如何,我使用如下所示的select命令从数据库中删除值:

<asp:SqlDataSource id="sds_docReader" ConnectionString="<%$ ConnectionStrings:constr %>"
 runat="server" SelectCommand="
 SELECT '--Please Select--' AS fld_DocCode, '' AS myValue,  0 as myorder
 UNION
 SELECT fld_DocCode, (CAST([fld_MemCost25] AS varchar(10)) + '^^' + CAST([fld_NonMemCost25] AS varchar(10)) + '@@' + CAST([fld_MemCost50] AS varchar(10)) + '^^' + CAST([fld_NonMemCost50] AS varchar(10)) + '@@' + CAST([fld_MemCost75] AS varchar(10)) + '^^' + CAST([fld_NonMemCost75] AS varchar(10)) + '@@' + CAST([fld_MemCost100] AS varchar(10)) + '^^' + CAST([fld_NonMemCost100] AS varchar(10)) + '@@' + CAST([fld_MemCost200] AS varchar(10)) + '^^' + CAST([fld_NonMemCost200] AS varchar(10)) + '@@' + CAST([fld_MemCost300] AS varchar(10)) + '^^' + CAST([fld_NonMemCost300] AS varchar(10)) + '@@' + CAST([fld_MemCost400] AS varchar(10)) + '^^' + CAST([fld_NonMemCost400] AS varchar(10)) + '@@' + CAST([fld_MemCost500] AS varchar(10)) + '^^' + CAST([fld_NonMemCost500] AS varchar(10))) AS myValue, 
 1 as myorder
 FROM [tbl_DocData]
 ORDER BY myorder, fld_DocCode " />

并将其推入我的下拉列表的值字段,以便在页面后端获得类似内容:

value="60.50^^75.50@@121.00^^151.00@@135.75^^181.50@@181.00^^242.00@@362.00^^484.00@@453.00^^633.00@@484.00^^724.00@@605.00^^905.00"

所以这就是我现在要做的事情:

在每个@@拆分值字段以获得一组价格对: "[member_price]^^[non_memberprice]"

使用数量下拉列表中的.selectedindex,我从我刚刚制作的数组中拉出正确的一对。

然后最后一步是将价格对数组从price1^^price2拆分为price1, price2

数组

然后,根据他们是否已经选中一个方框来显示他们是否为会员,我将采用该数组的0索引成员(价格对的左侧)作为会员价格,或非成员价格的数组的1索引成员。

这是我试图用来执行上述操作的代码:

Protected Sub btn_Calc_Command(sender As Object, e As System.Web.UI.WebControls.CommandEventArgs)
    'get the left side of the price pairs (members)
    Dim side As Integer = 0

    If cb_CCTAMember.Checked = True Then
        'get the right side (non members)
        side = 1
    End If


    If AC1.SelectedItem.Text <> "--Please Select--" And Quan1.SelectedItem.Text <> "0" Then
        'we calculate

        'get right hidden value string
        Dim costs As String = AC1.SelectedItem.Value

        'split by quantity to get price pairs
        Dim costarray As Array
        costarray = costs.Split("@@")

        'get right pair
        Dim pair As String = costarray(Quan1.SelectedIndex - 1)

        'split the pair
        Dim sprice As Array
        sprice = pair.Split("^^")

        'show cost as the right value
        Cost1.Value = sprice(side)

    End If
End Sub

所以目前它有效,但只适用于其他所有价值。即它适用于25但不适用于50,适用于75但不适用于100。

我错过了任何关于可能出现问题的明显/任何想法/关于获得相同结果的替代方法的想法。

欢呼声

1 个答案:

答案 0 :(得分:0)

这可能会或可能不会起作用,但请尝试将string.split()替换为:

costs.Split({"@@"}, StringSplitOptions.RemoveEmptyEntries)

pair.Split({"^^"}, StringSplitOptions.RemoveEmptyEntries)

由于split()函数保留在空条目中这一事实,我猜你在处理奇数时遇到了问题......

就像我说的那样,它可能无法解决问题,但我之前已经解决过类似问题...