Gridline in Tableview using scrollview

Discussion in 'Android Questions' started by junaidahmed, Feb 4, 2011.

  1. nemethv

    nemethv Member Licensed User

    Hi,

    Thanks for that.
    Apparently the line

    Code:
    If i = 0 AND Table.GetView(rc.Row * NumberOfColumns + 1).Text = "Something" Then L.Color = Colors.Red
    is unhappy about the .text part as that element cannot have it's text part queried. ("unknown member")

    Also re initialising L, is it just a simple L.initialize?
     
  2. klaus

    klaus Expert Licensed User

    Try this line:
    Code:
    If i = 0 AND Value(1) = "Something" Then L.Color = Colors.Red
    This changes the color of the first cell if the value for the second one = "Something".
    Best regards.
     
  3. nemethv

    nemethv Member Licensed User

    Almost perfect :)
    Except for that now since we're doing a step-1 all the cols are brought in the wrong way around, so what's supposed to be in the first place is the last....

    Wouldn't it be possible to do something like a 'modifyView' to go back after drawing the table and say if in each row Col1 = 'Sth' then Col0 should be red?
     
    Last edited: Apr 15, 2012
  4. klaus

    klaus Expert Licensed User

    Sorry, but I don't really understand what you are meaning.

    Yes, it would be possible, but why not doing it directly when you fill the table.

    It would be easier if you posted your project as a zip file (IDE menu Export As Zip) or at least a smaller project that shows the problem.

    Best regards.
     
  5. mc73

    mc73 Well-Known Member Licensed User

    A grid with some rows and columns, with the color of label at first column changed when specific text is found in a specific column. Perhaps this helps.
     

    Attached Files:

  6. mrjaw

    mrjaw Active Member Licensed User

    Could Somebody convert this code to a module ?
     
  7. xavcor75

    xavcor75 Member Licensed User

    Remove lines

    Hi, this table is perfect for my app, thanks. Now I'm trying to add a sub to remove a entire row, so I remove all the views of the selected row, therefore I need to redraw all the rows below and its data to fill the spaces left by the row eliminated. Have someone already implemented a similar process? Is there a better solution? Thanks in advanced.

    Pd. Sorry my english is very poor!
     
  8. klaus

    klaus Expert Licensed User

  9. xavcor75

    xavcor75 Member Licensed User

    You're right klaus, in scrollviewlist example there are a sub to remove rows of a the table. Thanks..:sign0098:

    Best Regards
     
  10. GMan

    GMan Well-Known Member Licensed User

    Hoi Klaus,
    is it possible to make the colum as small as the smallest entry ?
    Not EACH ;-) - hope you mentioned what i meant
     
  11. klaus

    klaus Expert Licensed User

    Not automatically.
    But you can calculate the width and set it with SetColumnWidths.
     
  12. TheFalcon

    TheFalcon Active Member Licensed User

    Good Night, and sorryfor my English, do not ye express both use translator.
    I'm using your example of table.
    But instead of having the CSV file already generated in the dirassets, what genre I in defaultexternal, pulling data from SQL, the problem is that I get separated by "," does not create tables me, but if I add that file to project and genre from dirassets if I generate them. I would appreciate any guidance.

    I generate csv using this code:


    Code:
    cursor1 = SQL1.ExecQuery("SELECT * FROM Diario")
    For i = 0 To cursor1.RowCount - 1
    cursor1.Position = i

    'con estas lineas metemos los datos en distintas variables para luego cargarlos juntos.
    fecha_informe = cursor1.GetString("Fecha"'pasa el dato recogido a la variable dato que es string
    peso_informe = cursor1.GetString("Peso")
    tipo_informe = cursor1.GetString(
    "Tipo")

    'aqui añadimos los datos separados por coma con lo cual las lineas serian   FECHA,PESO,TIPO  , para luego cargar ne listview
    tabla.Add(Array As String(fecha_informe & "," & peso_informe & "," & tipo_informe)) ' aqui lo añadimos a la lista TABLA
      Next
         
         
    'con esto guardariamos un archivo en el directorio de la aplicacion con el nombre de informe.csv
    Dim sa As StringUtils ' Libreria que hay que añadir
           sa.SaveCSV(File.DirDefaultExternal,"informes.csv",",",tabla)
    I load it using your own code, but instead of loading it from the complimentary assets defaultexternal
     

    Attached Files:

  13. klaus

    klaus Expert Licensed User

    Do you need the csv file or is it an intermediate file to load inot the table.
    This example is an old one, did you have a look at the Flexible Table Class where you can fill a table directly from a SQLite database.

    This line is wrong:
    tabla.Add(ArrayAsString(fecha_informe & "," & peso_informe & "," & tipo_informe))
    it should be
    tabla.Add(ArrayAsString(fecha_informe, peso_informe, tipo_informe))
     
  14. TheFalcon

    TheFalcon Active Member Licensed User

    Thank you :p its OK
     
  15. Massimiliano

    Massimiliano Member Licensed User

    I'm using this great solution and it's working fine!
    However I'm having some problems with the grid refresh (when rows decrease) if manifest targetSdkVersion >= (SDK) 14 and hardwareAccelerated is set to "false".
    Did it ever happened to you? I'm using B4A v4.30

    Many thanks
     
  16. klaus

    klaus Expert Licensed User

    What exactly is the problem ?
    Do you adjust the ScrollView.Panel.Height ?
    You may add one or two DoEvenets lines after the Height change.
     
  17. Massimiliano

    Massimiliano Member Licensed User

    Hi Klaus, thank you,
    give a look at this example
    It doen't work for me until i turn on hardware acceleration or target sdk version < 14 in the manifest file
     
  18. Massimiliano

    Massimiliano Member Licensed User

    Sub Process_Globals
    End Sub

    Sub Globals
    Dim TMR As Timer

    Dim TH1 As TabHost

    Dim THEX As TabHostExtras

    Dim SV1, SV2, SV3 As ScrollView
    Dim P1, P2, P3 As Panel
    Dim T1, T2, T3 As Panel

    Dim Header As Panel

    Dim h1() As String
    Dim h2() As String
    Dim h3() As String

    Dim i1() As Int
    Dim i2() As Int
    Dim i3() As Int

    Dim RowHeight As Int
    Dim HeaderColor, LineColor, CellColor, FontColor, HeaderFontColor As Int
    Dim RowLineBorder, ColLineBorder As Int
    Dim FontSize As Float
    Dim Alignment As Int

    RowLineBorder = 1dip
    ColLineBorder = 1dip
    RowHeight = 20dip
    FontSize = 8
    Alignment = Gravity.CENTER
    LineColor = Colors.DarkGray
    CellColor = Colors.Black
    FontColor = Colors.White
    HeaderColor = Colors.LightGray
    HeaderFontColor = Colors.Black
    End Sub

    Sub Activity_Create(FirstTime As Boolean)
    TH1.Initialize("TH1")
    THEX.setTabHeight(TH1, 100%y)
    THEX.setTabContentViewPadding(TH1, 0, 0, 0, 0)

    Activity.AddView(TH1, 0, 0, 100%x, 100%y)

    P1.Initialize("")
    P2.Initialize("")
    P3.Initialize("")

    TH1.AddTab2("TAB1", P1)
    TH1.AddTab2("TAB2", P2)
    TH1.AddTab2("TAB3", P3)

    h1 = Array As String("#", "COL1", "COL2", "COL3", "COL4", "COL5", "COL6", "COL7")
    h2 = Array As String("#", "COL1", "COL2", "COL3", "COL4", "COL5")
    h3 = Array As String("#", "COL1", "COL2", "COL3", "COL4", "COL5", "COL6")

    SV1.Initialize(0)
    SV2.Initialize(0)
    SV3.Initialize(0)

    P1.AddView(SV1, 0, RowHeight + RowLineBorder * 2, TH1.Width - (h1.Length + 2) * ColLineBorder, TH1.Height - THEX.getTabHeight(TH1) - RowHeight - RowLineBorder * 2 - 10dip)
    P2.AddView(SV2, 0, RowHeight + RowLineBorder * 2, TH1.Width - (h2.Length + 2) * ColLineBorder, TH1.Height - THEX.getTabHeight(TH1) - RowHeight - RowLineBorder * 2 - 10dip)
    P3.AddView(SV3, 0, RowHeight + RowLineBorder * 2, TH1.Width - (h3.Length + 2) * ColLineBorder, TH1.Height - THEX.getTabHeight(TH1) - RowHeight - RowLineBorder * 2 - 10dip)

    T1 = SV1.Panel
    T2 = SV2.Panel
    T3 = SV3.Panel

    T1.Color = LineColor
    T2.Color = LineColor
    T3.Color = LineColor

    i1 = Array As Int(SV1.Width * 0.05, SV1.Width * 0.12, SV1.Width * 0.15, SV1.Width * 0.15, SV1.Width * 0.15, SV1.Width * 0.10, SV1.Width * 0.14, SV1.Width * 0.14)
    i2 = Array As Int(SV2.Width * 0.05, SV2.Width * 0.30, SV2.Width * 0.25, SV2.Width * 0.15, SV2.Width * 0.10, SV2.Width * 0.15)
    i3 = Array As Int(SV3.Width * 0.05, SV3.Width * 0.175, SV3.Width * 0.175, SV3.Width * 0.15, SV3.Width * 0.15, SV3.Width * 0.15, SV3.Width * 0.15)

    SetHeader(SV1, P1, h1, i1)
    SetHeader(SV2, P2, h2, i2)
    SetHeader(SV3, P3, h3, i3)

    TMR.Initialize("TMR", 1000)
    End Sub

    Sub Activity_Resume
    TMR.Enabled = True
    End Sub

    Sub Activity_Pause(UserClosed As Boolean)
    TMR.Enabled = False
    End Sub

    Sub TMR_Tick
    FillGrid
    End Sub

    Sub FillGrid

    ' RANDOM FILL TEST
    Dim i As Int
    Dim j As Int

    ClearPanel(T1)
    j = Rnd(0, 9)
    For i = 0 To j
    AddRow(T1, Array As String(j, T1.NumberOfViews, T1.Height, P1.Height, i, i, i, i), i1)
    Next

    End Sub

    Sub ClearPanel(PanelName As Panel)
    PanelName.RemoveAllViews
    PanelName.Height = 0
    End Sub

    Sub AddRow(PanelName As Panel, Values() As String, ColumnWidth() As Int)
    Dim lastRow As Int = PanelName.NumberOfViews / Values.Length
    Dim col As Int
    For col = 0 To Values.Length - 1
    Dim lbl As Label
    lbl.Initialize("L")
    lbl.Text = Values(col)
    lbl.Gravity = Alignment
    lbl.TextSize = FontSize
    lbl.TextColor = FontColor
    lbl.Color = CellColor
    PanelName.AddView(lbl, GetColLeft(ColumnWidth, col), (RowHeight + RowLineBorder) * lastRow, ColumnWidth(col) - ColLineBorder, RowHeight)
    Next
    PanelName.Height = (RowHeight + RowLineBorder) * (lastRow + 1)
    End Sub

    Sub SetHeader(ScrollName As ScrollView, PanelName As Panel, Values() As String, ColumnWidth() As Int)
    Dim col As Int
    Header.Initialize("")
    For col = 0 To Values.Length - 1
    Dim lbl As Label
    lbl.Initialize("")
    lbl.Text = Values(col)
    lbl.Gravity = Gravity.CENTER
    lbl.TextSize = FontSize
    lbl.Color = HeaderColor
    lbl.TextColor = HeaderFontColor
    lbl.Tag = col
    Header.AddView(lbl, GetColLeft(ColumnWidth, col), 0, ColumnWidth(col) - ColLineBorder, RowHeight)
    Next
    PanelName.AddView(Header, ScrollName.Left, ScrollName.Top - (RowHeight + RowLineBorder), ScrollName.Width, RowHeight + RowLineBorder)
    End Sub

    Sub GetColLeft(ColumnWidth() As Int, ColNum As Int) As Int
    Dim i, ColWidth As Int
    ColWidth = 0
    For i = 0 To ColNum - 1
    ColWidth = ColWidth + ColumnWidth(i)
    Next
    Return ColWidth
    End Sub
     
  19. klaus

    klaus Expert Licensed User

    I added your code in a new project and it works as expected.
    Instead of posting the code you should have posted the project as a zip file.
    Attached my test project.
     

    Attached Files:

  20. Massimiliano

    Massimiliano Member Licensed User

    Yes I know it works, but if change the manifest file version as follow
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19"/>
    instead of
    <uses-sdk android:minSdkVersion="5" android:targetSdkVersion="14"/>

    and then

    SetApplicationAttribute(android:hardwareAccelerated, "false")

    No longer works for me (Motorola motog lte xt1039 - android 4.4.4)
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice