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