Re: dynamically building template columns

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



Thank you for answering the post.

Yes. I realize that sorting can be turned off for a particular column by
setting its SortExpression to an empty string BUT how do you do that for
columns that are sometimes there and sometimes not?

I found another article that lets me Format AutoGenerateColumns in an
ASP.NET Grid - The Code Project- ASP.NET

But the author doesn't go as far as tapping into the SortExpression for the
header.


Here is an example of his routine that should be referenced in the
OnRowDataBound event as follows

<asp:GridView id = "MyList" runat = "server"
AutoGenerateColumns-"true"
OnRowDataBound= "GV_RowDataBound"


private void GV_RowDataBound(object o, GridViewRowEventArgs e)
{
// apply custom formatting to data cells
if (e.Row.RowType == DataControlRowType.DataRow)
{
// set formatting for the category cell
TableCell cell = e.Row.Cells[0];
cell.Width = new Unit("120px");
cell.Style["border-right"] = "2px solid #666666";
cell.BackColor = System.Drawing.Color.LightGray;

// set formatting for value cells
for(int i=1; i<e.Row.Cells.Count; i++)
{
cell = e.Row.Cells[i];

// right-align each of the column cells after the first
// and set the width
cell.HorizontalAlign = HorizontalAlign.Right;
cell.Width = new Unit("90px");

// alternate background colors
if (i % 2 == 1)
cell.BackColor
= System.Drawing.ColorTranslator.FromHtml("#EFEFEF");

// check value columns for a high enough value
// (value >= 8000) and apply special highlighting
if (GetCellValue(cell) >= 8000)
{
cell.Font.Bold = true;
cell.BorderWidth = new Unit("1px");
cell.BorderColor = System.Drawing.Color.Gray;
cell.BorderStyle = BorderStyle.Dotted;
cell.BackColor = System.Drawing.Color.Honeydew;
}

}
}

// apply custom formatting to the header cells
if (e.Row.RowType == DataControlRowType.Header)
{
foreach (TableCell cell in e.Row.Cells)
{
cell.Style["border-bottom"] = "2px solid #666666";
cell.BackColor=System.Drawing.Color.LightGray;
}
}

}


I imagine that what I want to set is in the last part with the Header Cells.
However, I don't know what property to tap into to get to the sort expression.

I've only found luck tapping into it using ItemTemplates.

If you have any ideas, I'm stoked!


"CaffieneRush@xxxxxxxxx" wrote:

TemplateFields are an overkill if you just want to control sorting
individual columns.
Sorting can be turned off for a particular gridview column by setting
it's SortExpression to an empty string.

Andy

On 23 May, 04:01, jonefer <jone...@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
Ok, I found a good article of how to dynamically build template columns
The reason I want to use this is so that I can only set certain columns to
be sortable.

what I'm trying to do is read the value of a column - for example if the
column reads 'General Course' in the first 14 letters... I want that field to
be sortable

So here is the call that actually builds and populates my gridview - I just
wonder why I can't change any properties in the template?

lCount = tb_ActionList.GetActionList(sSL, sDIR, sSup, sLocName,
sDeptName, "Gen").Tables("qActionGrid_GEN").Rows.Count
If lCount = 0 Then
ShowGrid(False)
Me.lblCheck.Text = "No records match the selected criteria"
With Me.lblCheck
.ForeColor = Drawing.Color.Red
End With

Else

'try dynamic adding of template columns
For Each col As DataColumn In ds.Tables("qActionGrid_Gen").Columns
Dim bfield As TemplateField = New TemplateField
bfield.HeaderTemplate = New
GridViewTemplate(ListItemType.Header, col.ColumnName)
bfield.ItemTemplate = New
GridViewTemplate(ListItemType.Item, col.ColumnName)
Dim colchk As String = Left(col.ColumnName, 14)
'If colchk = "General Course" Then
bfield.SortExpression = col.ColumnName
'End If

'bfield.ItemStyle.Font.Names

gvActionList.Columns.Add(bfield)
Next

'=======================================
gvActionList.DataSource = ds
gvActionList.DataBind()

Here is the class

Public Class GridViewTemplate
Implements ITemplate
Private _templateType As ListItemType
Private _columnName As String

Public Sub New(ByVal type As ListItemType, ByVal colname As String)
_templateType = type
_columnName = colname
End Sub

Sub InstantiateIn(ByVal container As System.Web.UI.Control) _
Implements ITemplate.InstantiateIn
Select Case _templateType
Case ListItemType.Header
Dim lbl As Label = New Label
lbl.Text = _columnName
container.Controls.Add(lbl)
' break
Case ListItemType.Item
Dim tb1 As TextBox = New TextBox
AddHandler tb1.DataBinding, AddressOf tb1_DataBinding
tb1.Columns = 4
container.Controls.Add(tb1)
' break
Case ListItemType.EditItem
' break
Case ListItemType.Footer
Dim chkColumn As CheckBox = New CheckBox
chkColumn.ID = "Chk" + _columnName
container.Controls.Add(chkColumn)
' break
End Select
End Sub

Sub tb1_DataBinding(ByVal sender As Object, ByVal e As EventArgs)
Dim txtdata As TextBox = CType(sender, TextBox)
Dim container As GridViewRow = CType(txtdata.NamingContainer,
GridViewRow)
Dim dataValue As Object = DataBinder.Eval(container.DataItem,
_columnName)
If Not (dataValue Is DBNull.Value) Then
txtdata.Text = dataValue.ToString
End If
End Sub
End Class

I feel I am so close to solving this... if I can just get these particular
columns to be searchable it would help me tremendously.



.



Relevant Pages

  • RE: Error Trap not working
    ... Dim ColACount as Integer ... Dim ColAAddress As String, ColAName As String, ColBRange as String ... 'Code here that names the range of cells in Col. B as ColBRange ...
    (microsoft.public.excel.programming)
  • RE: Error Trap not working
    ... "Steve C" wrote: ... Dim ColAAddress As String, ColAName As String, ColBRange as String ... 'Code here that names the range of cells in Col. B as ColBRange ...
    (microsoft.public.excel.programming)
  • Re: Find string in Data
    ... possible to process the data from its source rather than putting it in cells ... Dim Contents As String ... Dim Fields() As String ...
    (microsoft.public.excel.programming)
  • Re: convert a Word macro to an Excel macro
    ... specified column that contain specified text. ... once these cells are ... Dim myCell As Range ... Public Function ExtractDuration(InputString As String) As String ...
    (microsoft.public.excel.programming)
  • Search pattern
    ... Dim strfile As String ... Dim bAddressFound As Boolean ... Dim strCurrentChar As String ...
    (comp.databases.ms-access)