Re: Web Application Project - ReportViewer Control



Thanks for your followup AG,

The "strong typed" I mentioned here means the component class much have a
strong property to repesent a certain table column. For example, the typed
DataTable will contains many properties such as:

TypedDataTableRow.Column1, TypedDataTableRow.Column2 to supply the
database fields

However, for untyped datatable, you have to use DataRow["columnname"] to
access them. Visual Studio IDE's report datasource can only reflect
strong-typed properties, that's why untyped DataSet/DataTable can not work
here.

For creating a separate typed DataTable, I just use it to design the rdlc
report at design-time, after you finished the RDLC report design, you can
switch to use the original untyped one. So far this is a workaround
approach I can get.

Also, for the limitation here, it really make the client report designing
quite inconvenient, I will recommend you submit this issue to the feedback
center so as to inform the dev team. We really appreciate your feedback on
this:

https://connect.microsoft.com/feedback/default.aspx?SiteID=210&wa=wsignin1.0

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead



==================================================

Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.



Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.

==================================================


This posting is provided "AS IS" with no warranties, and confers no rights.




--------------------
Reply-To: "AG" <NOSPAMa-giam@xxxxxxxxxxxxxxxxx>
From: "AG" <NOSPAMa-giam@xxxxxxxxxxxxxxxxx>


Steven,

A columns in a datatable derived from a SQL strored procedure contain the
schema info, so I don't understand why the datatable would not be
considered
typed.

Anyway, are you saying that the only way to create a typed datatable, is
to
create a separate xsd file and the loop through all my rows and add them
to
the new datatable??

That seems very inefficient.

I might be better off creating a separate reports project and deploy to
the
report server and use remote processing.

--

AG
Email: discuss at adhdata dot com
"Steven Cheng[MSFT]" <stcheng@xxxxxxxxxxxxxxxxxxxx> wrote in message
news:C9moaL46HHA.6140@xxxxxxxxxxxxxxxxxxxxxxxxx
Thanks for your reply AG,

Now, I've seen the main problem here, your datatable are untyped. This
does
be a big problem as untyped DataTable do not have strong-typed properties
that can be recognized by the design-time DataSource window.

So far I think you may consider the following approach:

** use code to write out the XML Schema for your untyped
dataset/datatable,
here is a demo code snippet to do this:
=========
private void button1_Click(object sender, EventArgs e)
{

DataSet ds = new DataSet("myds");
DataTable dt = new DataTable("tb1");
dt.Columns.Add("id", typeof(long));
dt.Columns.Add("name", typeof(string));
dt.PrimaryKey = new DataColumn[]{dt.Columns["id"]};

dt.Rows.Add(1, "item1");
dt.Rows.Add(2, "item2");

dt.WriteXmlSchema("dt_scheme.xsd");

}
}
================

**after that, add the output xsd file(generarted above) into your
project
and let the VS IDE create a typed dataset/datatable for you.

** use the new generated type dataset/datatable type in your business
class
to create the fake method(be used by datasource window)

How do you think? If you have any further questions on this, please feel
free to let me know.


Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no
rights.




--------------------
Reply-To: "AG" <NOSPAMa-giam@xxxxxxxxxxxxxxxxx>
From: "AG" <NOSPAMa-giam@xxxxxxxxxxxxxxxxx>


Thanks Steven,

Now I see where my problem lies.
My class is returning an un-typed datatable which is generated from a
stored
procedure.
Can you point me so an example of creating a typed-datatable from an
untyped
one?

--

AG
Email: discuss at adhdata dot com
"Steven Cheng[MSFT]" <stcheng@xxxxxxxxxxxxxxxxxxxx> wrote in message
news:Vm2Lr0H6HHA.5608@xxxxxxxxxxxxxxxxxxxxxxxxx
Thanks for your reply AG,

Sorry that I haven't noticed you're using VB.NET.

Here is a VB.NET code snippet demonstrate some on this:

#in the following class, suppose GetDataTable() is the originally
function which directly return the TypedDataTable, now you can add a
new
function that return the array of "TypedDataRow", like the
"GetDataRecords"
function:


===============
Public Class MyDataSource

Public Function GetDataTable() As SimpleDS.UsersDataTable

Dim dt As New SimpleDS.UsersDataTable


dt.Rows.Add(1, "name1", "email1")
dt.Rows.Add(2, "name2", "email2")


Return dt

End Function


Public Function GetDataRecords() As SimpleDS.UsersRow()

Dim dt As New SimpleDS.UsersDataTable


dt.Rows.Add(1, "name1", "email1")
dt.Rows.Add(2, "name2", "email2")

Dim rows() As SimpleDS.UsersRow
ReDim rows(dt.Rows.Count)

dt.Rows.CopyTo(rows, 0)

Return rows
End Function


End Class
==============

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no
rights.






--------------------
Reply-To: "AG" <NOSPAMa-giam@xxxxxxxxxxxxxxxxx>
From: "AG" <NOSPAMa-giam@xxxxxxxxxxxxxxxxx>
References: <#mExuTs4HHA.1168@xxxxxxxxxxxxxxxxxxxx>
<OH8YFjw4HHA.6140@xxxxxxxxxxxxxxxxxxxxxx>
<uLqDafz4HHA.3940@xxxxxxxxxxxxxxxxxxxx>
<Z9eYYPV5HHA.4200@xxxxxxxxxxxxxxxxxxxxxx>
<ONjPljc5HHA.536@xxxxxxxxxxxxxxxxxxxx>
<9TI5W#h5HHA.360@xxxxxxxxxxxxxxxxxxxxxx>
Subject: Re: Web Application Project - ReportViewer Control
Date: Fri, 24 Aug 2007 11:29:16 -0400
Lines: 87
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.3138
X-RFC2646: Format=Flowed; Original
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3138
Message-ID: <uCi6HOm5HHA.1188@xxxxxxxxxxxxxxxxxxxx>
Newsgroups: microsoft.public.dotnet.framework.aspnet
NNTP-Posting-Host: ool-44c55ef0.dyn.optonline.net 68.197.94.240
Path: TK2MSFTNGHUB02.phx.gbl!TK2MSFTNGP01.phx.gbl!TK2MSFTNGP04.phx.gbl
Xref: TK2MSFTNGHUB02.phx.gbl
microsoft.public.dotnet.framework.aspnet:39678
X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet

Thanks Steven,

This looks promising, but I am having some trouble understanding it.
Could you please repeat it in VB and explain the origin of the object
sources (rpt_tableTableAdapter, etc) a bit more.
I have looked at help for table adapters and the examples are similar,
but
still confusing.

--

AG
Email: discuss at adhdata dot com
"Steven Cheng[MSFT]" <stcheng@xxxxxxxxxxxxxxxxxxxx> wrote in message
news:9TI5W%23h5HHA.360@xxxxxxxxxxxxxxxxxxxxxxxxx
Thanks for your followup AG,

So in your scenario, those Business class has already been well
defined
and
only return DataTable, dataset objects, right?

I've performed some further research and I suggest you consider the
following workaround:

** You can still keep the original business class's methods that
return
DataTable, however, you can add a new method which return the typed
DataRow
array. e.g. (the "GetDataRecords" method in the below class)

===========================
public class MyDataSource
{
public TDS.rpt_tableDataTable GetDataTable()
{
TDSTableAdapters.rpt_tableTableAdapter ta = new
TDSTableAdapters.rpt_tableTableAdapter();

TDS.rpt_tableDataTable table = new
TDS.rpt_tableDataTable();

ta.Fill(table);

return table;
}

public TDS.rpt_tableRow[] GetDataRecords()
{
TDSTableAdapters.rpt_tableTableAdapter ta = new
TDSTableAdapters.rpt_tableTableAdapter();

TDS.rpt_tableDataTable table = new
TDS.rpt_tableDataTable();

ta.Fill(table);

TDS.rpt_tableRow[] rows = new
TDS.rpt_tableRow[table.Rows.Count];

table.Rows.CopyTo(rows, 0);

return rows;
}


}
=======================


** Thus, at development time, you can see the class and design the
report
by the typedDataRow's properties in "Website data source" window. At
runtime, you can change the datasource back to use the original
method(which return DataTable)

How do you think?

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no
rights.
















.


Quantcast