• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 279
  • Last Modified:

Easy Question: Dynamically Formatting DataGrid columns

Hello experts!

I have a DataGrid that is bound to a custom-made DataSet. I would like to know how I can make one of the columns a column of LinkButtons programatically instead of just plaintext. I want to program an EventHandler to handle the LinkButton.Click events.

While we're at it...How can we programatically format a column's properties, e.g. alignment, font, etc?

Any help is appreciated.

Sincerely,
Taarik.
0
TZRick
Asked:
TZRick
  • 4
  • 2
1 Solution
 
TZRickAuthor Commented:
So far, the grid is displayed with all values correct, etc. It's just the formatting now. Here is the code for DataSet and DataGrid creation:

private void eventsListing ()
            {
                  DataSet ds = new DataSet ();
                  ds.Tables.Add (new DataTable ());
                  object [] values;
                  ds.Tables [0].Columns.Add (new DataColumn ("Event", typeof (string)));
                  ds.Tables [0].Columns.Add (new DataColumn ("Expected Attendance", typeof (string)));

                  for (int counter = 0; counter < 8; counter++)
                  {
                        values = new object [] {(getEventName ((ExtendedEvents)counter)),
                                                               getCountPerEvent ((ExtendedEvents) counter)};
                        ds.Tables [0].Rows.Add (values);
                  }
                                    
                  dgRSVP.DataSource = ds.Tables [0];
                  dgRSVP.DataBind ();
                  
                  return;
            }
0
 
CNTITDEPTCommented:
Have you tried playing with the html side:

example:

<asp:datagrid >
and the many properties it has...... <BoundColumn>..... <HyperLinkColumn>........<TemplateColumn>....... etc...                                                                                                
0
 
ryeandiCommented:
DataSet ds = new DataSet ();
ds.Tables.Add (new DataTable ("TableName"));
object [] values;
ds.Tables [0].Columns.Add (new DataColumn ("Event", typeof (string)));
ds.Tables [0].Columns.Add (new DataColumn ("Expected Attendance", typeof (string)));

for (int counter = 0; counter < 8; counter++)
  {
     values = new object [] {{(getEventName ((ExtendedEvents)counter)),
                                                     getCountPerEvent ((ExtendedEvents) counter)};    
     ds.Tables [0].Rows.Add (values);
  }

DataGridTableStyle dgts = new DataGridTableStyle();
dgts.MappingName = "TableName";

DataGridTextBoxColumn dgcs = new DataGridTextBoxColumn();
dgcs.MappingName = "Event";
dgcs.Width = 80;
dgts.GridColumnStyles.Add(dgcs);

dgcs = new DataGridTextBoxColumn();
dgcs.MappingName = "Expected Attendance";
dgcs.Width = 80;
dgts.GridColumnStyles.Add(dgcs);
dgRSVP.TableStyles.Add(dgts);                  
                             
dgRSVP.DataSource = ds.Tables [0];                  
               
return;
'****************************************************************
'*******Then******
private void dgRSVP_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
  string linkName = dgRSVP[dgRSVP.CurrentRowIndex,1].ToString();
  LinkLabel llbl = new LinkLabel();
  llbl.Size = new System.Drawing.Size(30, 10);
  llbl.AutoSize = true;
  llbl.Text = linkName;
  llbl.LinkClicked += new LinkLabelLinkClickedEventHandler(llbl_LinkClicked);

  DataGridTextBoxColumn dgtb = (DataGridTextBoxColumn)dgRSVP.TableStyles[0].GridColumnStyles[1];

  dgtb.TextBox.Controls.Clear();
  dgtb.TextBox.Controls.Add(llbl);            
}

just make sure you give you dataTable a name so the tablestyle knows what columns to map to.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
TZRickAuthor Commented:
Thank you so much for your help ryeandi. Your code looks really ingenious. The only thing is that I am using a WebForm and objects such as DataGridTableStyle seem to be only in the Windows Forms package.

Thank You for your help!

Taarik.
0
 
TZRickAuthor Commented:
CNTITDEPT...This DataGrid will be created dynamically. Could you expand a bit on the HTML please. HTML isn't one of my strong points right now. :-)
0
 
CNTITDEPTCommented:
I think I am on the wrong path here... it looks like you guys are writing for a WinForm not a WebForm, but if it was a Webform it still could be done dynamically using the textwriter to write the html on the fly.
0
 
TZRickAuthor Commented:
You got me wrong CNTITDEPT. I did same that I am using a WebForm. Anyway, thanks for your input. I was able to get help to solve the problem and the solution is below.

Thank you again for your help.

Sincerely,
Taarik.

private void eventsListing ()
{
      Session ["event"] = null;
      DataSet ds = new DataSet ();
      ds.Tables.Add (new DataTable ());
      object [] values;
      ds.Tables [0].Columns.Add (new DataColumn ("Event", typeof (string)));
      ds.Tables [0].Columns.Add (new DataColumn ("Expected Attendance", typeof (string)));

      for (int counter = 0; counter < 8; counter++)
      {
            values = new object [] {(getEventName ((ExtendedEvents)counter)),
                                                   getCountPerEvent ((ExtendedEvents) counter)};
            ds.Tables [0].Rows.Add (values);
      }
      
      Session ["item"] = 0;                  
      dgRSVP.ItemCreated += new DataGridItemEventHandler (dgRSVP_ItemCreated);          
            
      dgRSVP.DataSource = ds.Tables [0];
      dgRSVP.DataBind ();
                  
      return;
}

private void dgRSVP_ItemCreated(object sender, DataGridItemEventArgs e)
{
      DataGrid dg = (DataGrid) sender;
      int count = (int)Session ["item"];
                  
      LinkButton lnkNumbers = new LinkButton ();
                  
      try
      {
            lnkNumbers.Text = dg.Items [count].Cells [1].Text;
            lnkNumbers.CssClass = "maintext";
            lnkNumbers.Click += new EventHandler (lnkNumbers_Click);
            lnkNumbers.ID = count.ToString ();
            dg.Items [count].Cells [1].Text = "";
            dg.Items [count].Cells [1].HorizontalAlign = HorizontalAlign.Center;
            dg.Items [count].Cells [1].Controls.Add (lnkNumbers);
            Session ["item"] = count + 1;
      }
      catch (Exception ex) {}

      return;
}
0

Featured Post

Prep for the ITIL® Foundation Certification Exam

December’s Course of the Month is now available! Enroll to learn ITIL® Foundation best practices for delivering IT services effectively and efficiently.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now