Scott on Writing

Musings on technical writing...

Challenge: Emailing the Contents of a DataGrid with a ButtonColumn

In an earlier article on 4Guys, Emailing the Rendered Output of an ASP.NET Web Control, I looked at how one could, with just a bit of code, have the contents of a Web control emailed in an HTML-formatted email to a specified recipient.  Below is a screenshot of a DataGrid emailed to myself using the code I discussed in the previous article.  Practical uses for emailing the rendered contents of a data Web control might be to send a user's shopping cart, or send an online invoice, or any other number of features where the data is presented in a data Web control and the user wants some form of an email receipt.

Since the article's inception, I have received a few emails from alert 4Guys readers saying that if the DataGrid has a ButtonColumn (or an EditCommandColumn, or a TemplateColumn with LinkButtons or Buttons), that attempting to render the DataGrid results in an error.  This occurs because when the DataGrid's control hierarchy contains a Button or LinkButton, when this Button or LinkButton is rendered, the Page.VerifyRenderingInServerForm() method is called.  This method checks to ensure that rendering of a server form has started before the control is rendered.

Now, the challenge I propose to you, the six people who read my blog, is: “How can this be overcome so that an email can be sent?”  I have already thought of a couple of ways, and ASP.NET server control God Andy Smith has also provided some suggestions... but I'm interested to see what ideas others can come up with.  Both mine and Andy's ways feel like hacks.  I'll be happy to share them soon enough (in the form of an upcoming 4Guys article nonetheless), but am interested in alternative approaches.  (Rather than take the time to share Andy's approach and my approaches, I'd rather just let those who care to respond to free-think on their own...)

posted on Monday, October 20, 2003 10:06 AM

Feedback

# re: Challenge: Emailing the Contents of a DataGrid with a ButtonColumn 10/21/2003 5:21 AM Matt Watson

Override the Render method in your own DataGrid, take its Rendered HTML and email it.

Override and do something like this:
Dim sw As New StringWriter
Dim HtmlWriter As New HtmlTextWriter(sw)

'Write to memory instead of output stream
MyBase.Render(HtmlWriter)
SendEmail(sw.GetStringBuilder().ToString())

Maybe I helped a little...

# re: Challenge: Emailing the Contents of a DataGrid with a ButtonColumn 10/21/2003 7:34 AM Aemca

Dave Wanta's dot net mail component has the ability to embed datagrid's in emails.

So I Guess it will probably do just this :)


# re: Challenge: Emailing the Contents of a DataGrid with a ButtonColumn 10/21/2003 10:14 AM Scott Mitchell

Matt, with that approach, the custom DataGrid class will have its contents emailed every time. I guess one solution would be to add two custom properties, SendAsEmail and EmailAddress, which if specified cause it to be emailed...

Aemca, I've not tried using Dave's component on this, but I did use a disassembler to examine the code to see how he did it. Essentially, Dave uses the same approach as I discussed in the Emailing the Rendered Output of an ASP.NET Web Control article, so I would wager that it doesn't work when the DataGrid contains ButtonColumns and the like.

# re: Challenge: Emailing the Contents of a DataGrid with a ButtonColumn 10/21/2003 10:43 PM Scott Mitchell

If anyone cares, the article highlighting my technique is up at:
http://aspnet.4guysfromrolla.com/articles/102203-1.aspx

# re: Challenge: Emailing the Contents of a DataGrid with a ButtonColumn 12/10/2003 2:37 PM Adam Weber

i was able to implement your technique in a datalist. But i ran into the problem that i didn't want buttons rendered in my email output. So i just looped through each datalist item, found the buttons i needed to remove, and removed them using the RemoveAt() method of the Controls collection. With the buttons removed, i re-rendered the datalist using your method and emailed it no problem.

i doubt it's a very efficient way to solve the problem, or if it would even work with a datagrid. just my 2 cents :)

Title:  
Name:  
Url:
Protected by Clearscreen.SharpHIPEnter the code you see:
Comments   

My Links

Ads Via DevMavens

Archives

Post Categories

 

I am a Microsoft MVP for ASP.NET.
I am an ASPInsider.
<July 2008>
SMTWTFS
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

Comment Stats

DayTotal% of Total
Sunday 1896.8%
Monday 39014.0%
Tuesday 46916.8%
Wednesday 51518.5%
Thursday 54419.5%
Friday 50818.2%
Saturday 1706.1%
Total 2785100.0%

Hour1Total% of Total
12:00 AM 682.4%
1:00 AM 712.5%
2:00 AM 632.3%
3:00 AM 752.7%
4:00 AM 572.0%
5:00 AM 1093.9%
6:00 AM 1114.0%
7:00 AM 1615.8%
8:00 AM 1756.3%
9:00 AM 1505.4%
10:00 AM 1736.2%
11:00 AM 1826.5%
12:00 PM 1906.8%
1:00 PM 1766.3%
2:00 PM 1605.7%
3:00 PM 1324.7%
4:00 PM 1124.0%
5:00 PM 983.5%
6:00 PM 913.3%
7:00 PM 993.6%
8:00 PM 853.1%
9:00 PM 802.9%
10:00 PM 833.0%
11:00 PM 843.0%
Total 2785100.0%

Comments by Blog Entry Date/Time

Day Entry MadeAvg.Total
Sunday 5.14144
Monday 5.35353
Tuesday 4.35444
Wednesday 7.58644
Thursday 6.87625
Friday 5.45414
Saturday 5.03161
Total 5.802785

Hour1 Entry MadeAvg.Total
12:00 AM 5.0035
1:00 AM 1.002
5:00 AM 0.000
7:00 AM 7.0035
8:00 AM 5.45109
9:00 AM 6.34279
10:00 AM 6.41250
11:00 AM 4.28184
12:00 PM 6.98342
1:00 PM 2.87112
2:00 PM 5.29222
3:00 PM 8.54299
4:00 PM 3.9190
5:00 PM 5.78156
6:00 PM 4.52113
7:00 PM 9.32177
8:00 PM 9.06154
9:00 PM 5.14113
10:00 PM 6.2381
11:00 PM 4.5732
Total 5.802785

Learn More About Comment Stats
1 - All times GMT -8...


Blog Stats

Favorite Web Sites

My Books

My MSDN Articles