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.
<March 2010>
SMTWTFS
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

Comment Stats

DayTotal% of Total
Sunday 2056.8%
Monday 42514.1%
Tuesday 51917.2%
Wednesday 55518.4%
Thursday 58019.2%
Friday 54718.1%
Saturday 1886.2%
Total 3019100.0%

Hour1Total% of Total
12:00 AM 782.6%
1:00 AM 812.7%
2:00 AM 682.3%
3:00 AM 822.7%
4:00 AM 692.3%
5:00 AM 1264.2%
6:00 AM 1183.9%
7:00 AM 1816.0%
8:00 AM 1926.4%
9:00 AM 1585.2%
10:00 AM 1886.2%
11:00 AM 1936.4%
12:00 PM 2016.7%
1:00 PM 1846.1%
2:00 PM 1695.6%
3:00 PM 1354.5%
4:00 PM 1153.8%
5:00 PM 1073.5%
6:00 PM 1013.3%
7:00 PM 1073.5%
8:00 PM 923.0%
9:00 PM 882.9%
10:00 PM 913.0%
11:00 PM 953.1%
Total 3019100.0%

Comments by Blog Entry Date/Time

Day Entry MadeAvg.Total
Sunday 4.97159
Monday 4.80384
Tuesday 4.04477
Wednesday 7.39680
Thursday 6.26676
Friday 5.07466
Saturday 4.78177
Total 5.403019

Hour1 Entry MadeAvg.Total
12:00 AM 5.2937
1:00 AM 1.002
5:00 AM 0.000
7:00 AM 3.8550
8:00 AM 3.72134
9:00 AM 6.06297
10:00 AM 5.63276
11:00 AM 4.22194
12:00 PM 6.16351
1:00 PM 3.09133
2:00 PM 4.89230
3:00 PM 7.64321
4:00 PM 4.00108
5:00 PM 6.07170
6:00 PM 4.64116
7:00 PM 8.95188
8:00 PM 8.63164
9:00 PM 5.00115
10:00 PM 6.31101
11:00 PM 4.5732
Total 5.403019

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


Blog Stats

Favorite Web Sites

My Books

My MSDN Articles