русский
Germany.ruForen → Архив Досок→ Programmierung

Резюме для программиста

27.01.22 04:12
Re: Резюме для программиста
 
uscheswoi_82 старожил
in Antwort AlexNek 26.01.22 17:47
никогда не смешивайте слой отображения со слоем данных.

Я не смешиваю. Я посмотрел код, там не так уж и сложно. В том примере что я дал, программа сначало читает спомощью OleDB Excel файл, а потом программа зафигачивает данные в коллекцию и передаёт вьюшке эту коллекцию, во вьюшке спомощью foreach отображает данные. Эта такая глупость, потому-что у MS-SQL нет как в MySQL LIMIT и OFFSET см. https://www.mysqltutorial.org/mysql-limit.aspx, в классическом (WebForm) ASP NET там в сетку можно в сетку добавить Pager см. https://www.c-sharpcorner.com/UploadFile/rohatash/gridview-paging-sample-in-Asp-Net/, который сам будет управлять. В PHP я пишу так 1 страница - "SELECT * FROM Persone LIMIT 0, 10", 2 страница - "SELECT * FROM Persone LIMIT 11, 21", итд. Я не могу передать много данных во Viewшку, сейчас все кто может ограничивается 10-20 строчками, чтобы не загружать сервер. Хотя нет что-то нашёл - https://stackoverflow.com/questions/2135418/equivalent-of-limit-and-offset-for-sql-server, Просто в классическом WebForm ASP NET сетка без моего участия управляет СУБД и отображает данные как надо.


Вот пример моего проекта по недвижимости, там сетка всё делает за меня:

Default.aspx:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" 
CodeFile="Default.aspx.cs" Inherits="_Default" Title="Immobilien, Wohnungen, Häuser" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">
    <div style="border:1px solid #EEEEEE; -moz-border-radius: 5px; border-radius:5px; padding:5px 5px 5px 5px;">
        <label>Wo?</label><br />
        <asp:TextBox ID="txtWhere" runat="server" CssClass="form-control" Width="150px"></asp:TextBox><br />
        <br />
        <label>Preis bis</label><br />
        <asp:TextBox ID="txtPrice" runat="server" CssClass="form-control" Text="2000" Width="150px"></asp:TextBox><br />
        <br />
        <label>Zimmer ab</label><br />
        <asp:TextBox ID="txtRooms" runat="server" CssClass="form-control" Text="0" Width="150px"></asp:TextBox><br />
        <br />
        <label>Wohnfläche ab</label><br />
        <asp:TextBox ID="txtSquare" runat="server" CssClass="form-control" Text="0" Width="150px"></asp:TextBox><br /><br />
        <asp:Button ID="btnSearch" runat="server" Text="Suchen" CssClass="btn btn-primary" 
            onclick="btnSearch_Click" />
    </div>
    <br />
    <asp:ListView ID="lvMain" runat="server" ItemPlaceholderID="PlaceHolder1">
        <LayoutTemplate>
            <hr />
            <table width="50%" class="table table-striped">
                <thead>
                    <tr>
                        <th>Stadt</th>
                        <th>Preis</th>
                        <th>Anz.Zimmer</th>
                        <th>Wohnfläche</th>
                    </tr>
                </thead>
                <tbody>
                   <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
               </tbody>
            </table>    
        </LayoutTemplate>
        <ItemTemplate>
            <tr>
                <td><a href="Details.aspx?id=<%# Eval("InseratID") %>"><%# Eval("StadtBez") %></a></td>
                <td><%# Eval("Preis", "{0:c}") %></td>
                <td><%# Eval("AnzZimmer") %></td>
                <td><%# Eval("Groesse") %></td>
            </tr>    
        </ItemTemplate>
    </asp:ListView>
    <br />
    <br />
    <!-- ПАГИНАТОР НАЧАЛО -->
    <asp:DataPager ID="dpMain" runat="server" PagedControlID="lvMain" PageSize="10">
        <Fields>
            <asp:NextPreviousPagerField />
            <asp:NumericPagerField />
        </Fields>
    </asp:DataPager>    
    <!-- ПАГИНАТОР КОНЕЦ -->
</asp:Content>


Default.aspx.cs:


using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OleDb;
public partial class _Default : System.Web.UI.Page {
  protected void Page_Load(object sender, EventArgs e) { }
  protected void btnSearch_Click(object sender, EventArgs e) {
  try {
    DataTable dt = new DataTable();
    OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["default"].ConnectionString);
    con.Open();
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT i.InseratID, i.PLZ, s.Bezeichnung AS StadtBez, i.Etage, i.AnzZimmer, i.Preis, i.Groesse " + 
    "FROM Inserat AS i INNER JOIN Stadt AS s ON i.StadtID = s.StadtID WHERE s.Bezeichnung LIKE '%" + this.txtWhere.Text + "%'" + 
    "AND i.Preis <= " + this.txtPrice.Text + " AND i.AnzZimmer >= " + this.txtRooms.Text + " AND i.Groesse >= " + this.txtSquare.Text, con);
    da.Fill(dt);
    lvMain.DataSource = dt; // Всё за меня делает сетка и пагинатор!!!
    lvMain.DataBind(); // Всё за меня делает сетка и пагинатор!!!
  }
  catch (Exception ex) { }
  }
}


Web.config:

<connectionStrings>
  <add name="default" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|immobilien.mdb;"/>
</connectionStrings>
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
 

Sprung zu