برای قراردادن رشته مرتبط با بارکد زیر عکس تولید شده راهی هست؟
یا اینکه میشه یک ستون از دیتابیس رو به عنوان 2 تا column برای ریپورت تعریف کرد (که در حالت تست من نپذیرفت). یکی مقدار رشته ای ودیگری عکس بارکد رو نمایش بده؟
{ "name": "asp-net-mvc5x-angular2x", "version": "1.0.0", "author": "DNT", "description": "", "scripts": { "postinstall": "typings install" }, "license": "Apache-2.0", "dependencies": { "@angular/common": "^2.0.0-rc.0", "@angular/compiler": "^2.0.0-rc.0", "@angular/core": "^2.0.0-rc.0", "@angular/http": "2.0.0-rc.0", "@angular/router": "2.0.0-rc.0", "@angular/router-deprecated": "^2.0.0-rc.0", "@angular/platform-browser": "^2.0.0-rc.0", "@angular/platform-browser-dynamic": "^2.0.0-rc.0", "bootstrap": "^3.3.6", "es6-promise": "^3.1.2", "es6-shim": "^0.35.0", "jquery": "^2.2.3", "reflect-metadata": "^0.1.3", "rxjs": "^5.0.0-beta.6", "systemjs": "^0.19.27", "zone.js": "^0.6.12" }, "devDependencies": { "typescript": "^1.8.9", "typings": "^0.8.1" }, "repository": { } }
{ "ambientDependencies": { "es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#7de6c3dd94feaeb21f20054b9f30d5dabc5efabd" } }
import { PipeTransform, Pipe } from '@angular/core';
import { RouteParams, Router } from '@angular/router-deprecated';
/// <reference path="../typings/es6-shim.d.ts" /> import { bootstrap } from '@angular/platform-browser-dynamic'; // Our main component import { AppComponent } from "./app.component"; bootstrap(AppComponent);
<!DOCTYPE html> <html> <head> <base href="/"> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@ViewBag.Title - My ASP.NET Application</title> <link href="~/node_modules/bootstrap/dist/css/bootstrap.css" rel="stylesheet"/> <link href="~/app/app.component.css" rel="stylesheet"/> <link href="~/Content/Site.css" rel="stylesheet" type="text/css"/> <!-- 1. Load libraries --> <!-- IE required polyfills, in this exact order --> <script src="~/node_modules/es6-shim/es6-shim.min.js"></script> <script src="~/node_modules/zone.js/dist/zone.js"></script> <script src="~/node_modules/reflect-metadata/Reflect.js"></script> <script src="~/node_modules/systemjs/dist/system.src.js"></script> <script src="~/systemjs.config.js"></script> <!-- 2. Configure SystemJS --> <script> System.import('app/main').then(null, console.error.bind(console)); </script> </head> <body> <div> @RenderBody() <pm-app>Loading App...</pm-app> </div> @RenderSection("Scripts", required: false) </body> </html>
CREATE PRIMARY XML INDEX invoice_idx ON xmlInvoice3(invoice) SELECT * FROM sys.internal_tables
SELECT * FROM sys.xml_index_nodes_325576198_256000
sp_spaceused 'xmlInvoice3'
--DROP INDEX invoice_idx ON xmlInvoice3
SELECT * FROM xmlInvoice WHERE invoice.exist('/Invoice[@InvoiceId = "1003"]') = 1 SELECT * FROM xmlInvoice3 WHERE invoice.exist('/Invoice[@InvoiceId = "1003"]') = 1
CREATE XML INDEX invoice_path_idx ON xmlInvoice3(invoice) USING XML INDEX invoice_idx FOR PATH
CREATE XML INDEX invoice_value_idx ON xmlInvoice3(invoice) USING XML INDEX invoice_idx FOR VALUE CREATE XML INDEX invoice_prop_idx ON xmlInvoice3(invoice) USING XML INDEX invoice_idx FOR PROPERTY
SELECT * FROM xmlInvoice3 WHERE invoice.exist('/Invoice//CustomerName[text() = "Vahid"]') = 1
SELECT * FROM xmlInvoice3 WHERE invoice.exist('/Invoice//CustomerName[. = "Vahid"]') = 1
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="testWebForms87.WebForm5" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.5.3/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$("#resizableArea").resizable({
handles: "s"
})
.find("textarea").height("100%").width("100%");
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="resizableArea" style="width:300px; height:200px" >
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" ></asp:TextBox>
</div>
</form>
</body>
</html>
<div id="resizableArea" style="overflow:auto;height:200px;">
My Grid view ...
</div>
<asp:Panel ID="pnlScroll" runat="server" Width="391px" Height="282px" ScrollBars="Vertical">
My Grid view ...
</asp:Panel>
شاید از دید بسیاری از برنامه نویسان بررسی نحوه عملکرد Git چندان اهمیتی نداشته باشد، زیرا آنها سیستمی کارا برای مدیریت کدهای خود لازم دارند و نیازی نمیبینند که به جزئیات رفتار Git توجه کنند؛ به همین دلیل در بسیاری از منابع آموزشی این مفاهیم به این شکل گردآوری نشده است. اما من ترجیح دادم برای مدیریت و استفاده بهتر از Git حتی الامکان مطالب کاربردی را از پشت صحنه عملکرد Git در این بخش قرار دهم.
(Working Tree (Directory: پوشهی روتی است که فایلهای پروژه در آن نگهداری میشود. این پوشه باید حاوی پوشهای به نام git. باشد که محتویات این پوشه، در اصل Repository ما را تشکیل میدهند.
اشیا در Git:
برای درک بهتر عملکرد سیستم مدیریت کد Git بهتر است نگاهی به اجزای تشکیل دهنده آن داشته باشیم. به طور کلی Git دارای 4 نوع object است، که هر کدام وظیفه خاصی را به عهده دارند:
1)Tree: شیئ Tree دقیقا مانند دایرکتوریها در یک سیستم مدیریت فایل است. در واقع treeها ساختاری درختی را ایجاد میکنند تا وضیعت فایلها و پوشهها را در Repository حفظ نمایند. هر tree توسط یک کد منحصر به فرد SHA-1 نام گذاری میشود.
2)(BLOB(Binary large object: اگر با سیستمهای مدیریت داده نظیر SQL Server کار کرده باشید قطعا با BLOB آشنایی دارید. BLOBها در واقع چیزی نیستند جز یک مجموعه از بایتها که میتوانند حاوی هر چیزی باشند (نظیر عکس، فایل متنی، فایلهای اجرایی و...) در Git فایلها به صورت BLOB و به شکل کامل ذخیره میشوند. همچنین مقدار هش شده محتویات فایلها با استفاده از SHA-1 در خود فایل ذخیره میشود. به این ترتیب در صورت تغییر در فایل، مقدار هش جدید با مقدار موجود در فایل فرق کرده و Git متوجه میشود که فایل دچار تغییر شده است. نکته قابل توجه این است که بر خلاف بسیاری از سیستمهای مدیریت کد، در هر بار تغییر فایل، Git تنها تغییرات را ذخیره نمیکند بلکه از کل محتوا یک snapshot میگیرد. شاید به نظر بسیاری تهیه این snapshotهای فراوان باعث زیاد شدن حجم Repository شود، اما Git هوشمندانه تنها فایلهایی را مجددا ذخیره مینماید که مقدار آنها تغییر کرده است. در غیر این صورت یک نشانگر به فایل موجود در snapshot جدید ایجاد میکند.
3)Commit: این شئ، یک snapshot از وضعیت فعلی Working Tree است. در واقع با هر با دستور commit این object ایجاد شده و حداقل حاوی اطلاعات زیر است:
مقدار هش درختی که به آن اشاره میکند
نام ثبت کننده دستور commit
توضیحی درباره علت ایجاد commit
خود commit نیز توسط یک کد منحصر به فرد SHA-1 شناخته میشود.
4)Tag: چون کار کردن با کدهای هش commit ممکن مشکل باشد، میتوان از تگها به عنوان نامی برای commit استفاده نمود. خود تگ میتواند حاوی توضیحاتی باشد.
آشنایی با (Stage(Index:
هر فایل قبل از آنکه بخواهد در Repository توسط دستور commit ذخیره شود باید ابتدا به Stage آورده شود. در این حالت Git تغیرات فایل را دنبال کرده و سپس میتوان توسط دستور commit فایل را در Repository وارد کرد. بنابراین ذخیره یک فایل در Git دارای سه مرحله است:
Modified : یعنی فایل تغییر کرده اما به stage اضافه نشده است
Staged: فایل تغییر کرده به stage اضافه شده است.
Commited: فایل در Repository ذخیره شده است.
head:
اشارهگری است که به آخرین شئ commit اشاره میکند. هر Repository میتواند یک head برای هر شاخهی مختلف داشته باشد؛ اما در هر لحظه تنها یک head به عنوان head جاری شناخته میشود که معمولا آن را با حروف بزرگ یعنی HEAD مشخص میکنند.
تا این مرحله شما تقریبا تمامی آنچه که برای شروع کار با Git را لازم دارید آموختهاید. البته همانطور که در ابتدا اشاره کردم این مباحث دارای جزئیات بسیاری است اما تا این اندازه برای کار با Git کفایت میکند. در صورتیکه به نکات خاصی احتیاج پیدا کنیم، در طول بیان دستورات Git به آنها اشاره خواهد شد. در قسمت بعد نحوهی نصب و پیکرهبندی Git را بررسی میکنیم.
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; namespace PWS { public static class Helpers { /// <summary> /// تغییر اندازه تصویر /// </summary> /// <param name="imageFile">آرایه بایتی از تصویر مورد نظر</param> /// <param name="targetSize">اندازه تصویر خروجی</param> /// <param name="format">فرمت تصویر خروجی</param> /// <returns></returns> public static byte[] ResizeImageFile(this byte[] imageFile, Int32 targetSize, ImageFormat format) { if (imageFile == null) throw new Exception("لطفا تصویر اصلی را مشخص نمایید"); //باز کردن تصویر اصلی به عنوان یک جریان using (var oldImage = Image.FromStream(new MemoryStream(imageFile))) { //محاسبه اندازه تصویر خروجی با توجه به اندازه داده شده var newSize = CalculateDimensions(oldImage.Size, targetSize); //ایجاد تصویر جدید using (var newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb)) { using (var canvas = Graphics.FromImage(newImage)) { canvas.SmoothingMode = SmoothingMode.AntiAlias; canvas.InterpolationMode = InterpolationMode.HighQualityBicubic; canvas.PixelOffsetMode = PixelOffsetMode.HighQuality; //تغییر اندازه تصویر اصلی و قرار دادن آن در تصویر جدید canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize)); var m = new MemoryStream(); //ذخیره تصویر جدید با فرمت وارد شده newImage.Save(m, format); return m.GetBuffer(); } } } } /// <summary> /// محاسبه ابعاد تصویر خروجی /// </summary> /// <param name="oldSize">اندازه تصویر اصلی</param> /// <param name="targetSize">اندازه تصویر خروجی</param> /// <returns></returns> private static Size CalculateDimensions(Size oldSize, Int32 targetSize) { var newSize = new Size(); if (oldSize.Height > oldSize.Width) { newSize.Width = Convert.ToInt32(oldSize.Width * (targetSize / (float)oldSize.Height)); newSize.Height = targetSize; } else { newSize.Width = targetSize; newSize.Height = Convert.ToInt32(oldSize.Height * (targetSize / (float)oldSize.Width)); } return newSize; } } }
byte[] oldImage = FileUploadImage.FileBytes; byte[] target = oldImage.ResizeImageFile(100, ImageFormat.Jpeg);
dotnet new mvc
ng new SignalRCore2Client
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> <PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.0.0-alpha1-final" /> </ItemGroup> <ItemGroup> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup> </Project>
dotnet restore
dotnet watch run
using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR; namespace SignalRCore2WebApp.Hubs { public class MessageHub : Hub { public Task Send(string message) { return Clients.All.InvokeAsync("Send", message); } } }
public void ConfigureServices(IServiceCollection services) { services.AddSignalR(); services.AddMvc(); }
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseSignalR(routes => { routes.MapHub<MessageHub>(path: "message"); });
http://localhost:5000/message
using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using SignalRCore2WebApp.Hubs; namespace SignalRCore2WebApp.Controllers { public class HomeController : Controller { private readonly IHubContext<MessageHub> _messageHubContext; public HomeController(IHubContext<MessageHub> messageHubContext) { _messageHubContext = messageHubContext; } public IActionResult Index() { return View(); // show the view } [HttpPost] public async Task<IActionResult> Index(string message) { await _messageHubContext.Clients.All.InvokeAsync("Send", message); return View(); } } }
@{ ViewData["Title"] = "Home Page"; } <form method="post" asp-action="Index" asp-controller="Home" role="form"> <div class="form-group"> <label label-for="message">Message: </label> <input id="message" name="message" class="form-control"/> </div> <button class="btn btn-primary" type="submit">Send</button> </form>
npm install @aspnet/signalr-client --save
import { Component, OnInit } from "@angular/core"; import { HubConnection } from "@aspnet/signalr-client"; @Component({ selector: "app-root", templateUrl: "./app.component.html", styleUrls: ["./app.component.css"] }) export class AppComponent implements OnInit { hubPath = "http://localhost:5000/message"; messages: string[] = []; ngOnInit(): void { const connection = new HubConnection(this.hubPath); connection.on("send", data => { this.messages.push(data); }); connection.start().then(() => { // connection.invoke("send", "Hello"); console.log("connected."); }); } }
<div> <h1> The messages from the server: </h1> <ul> <li *ngFor="let message of messages"> {{message}} </li> </ul> </div>
ng serve -o
Failed to load http://localhost:5000/message: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.
public void ConfigureServices(IServiceCollection services) { services.AddSignalR(); services.AddCors(options => { options.AddPolicy("CorsPolicy", builder => builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials()); }); services.AddMvc(); }
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseCors(policyName: "CorsPolicy");