Your UI layer should be far-removed from your data access strategy - it shouldn t be dealing with raw data. Thus, your UI should communicate solely with your domain objects (directly or through a service layer).
You can then have the UI layer create the data structures that it needs in order to render. Any performance concerns could be mitigated through a caching strategy.
This affects the readability, testability and maintainability of the code which should always be long- and short-term goals of any design.
I think ideally you d want to see something along these lines:
UI
/|
|
SERVICE (? depending on the design)
/|
|
DOMAIN
/|
|
DCO
/|
|
DAL
EDIT:
On the flip-side, if you re building a very straight-forward WebForms application, then you may be able to forgo some of this complexity and just use the designers provided by Visual Studio. I ve found, however, that applications often evolve beyond the capabilities of the drag-and-drop interface and you end up having to refactor into a more separated design.
You always need to know what you stand to gain/lose by choosing an architectural strategy. If you can live (on the edge) with no testing, reduced readability and tighter coupling of the UI to the data ****shudder****, then perhaps the more straight-forward approach is for you.
Some links for further reading