Solved

Easy Question: Dynamically Formatting DataGrid columns

Posted on 2004-09-28
8
246 Views
Last Modified: 2008-03-06
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
Comment
Question by:TZRick
  • 4
  • 2
8 Comments
 
LVL 1

Author Comment

by:TZRick
ID: 12174008
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
 
LVL 1

Expert Comment

by:CNTITDEPT
ID: 12174647
Have you tried playing with the html side:

example:

<asp:datagrid >
and the many properties it has...... <BoundColumn>..... <HyperLinkColumn>........<TemplateColumn>....... etc...                                                                                                
0
 
LVL 1

Expert Comment

by:ryeandi
ID: 12174692
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
Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

 
LVL 1

Author Comment

by:TZRick
ID: 12179471
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
 
LVL 1

Author Comment

by:TZRick
ID: 12179591
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
 
LVL 1

Expert Comment

by:CNTITDEPT
ID: 12181568
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
 
LVL 1

Accepted Solution

by:
TZRick earned 0 total points
ID: 12182686
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

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applicationsā€¦
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a feā€¦
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now