Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры


Выпуск # 676

Друзья! Прошло совсем мало времени с момент последнего выпуска, и вот уже новый! Удивительно, как быстро летит время в Интернете, сколько всего нового происходит ежедневно, да что там, ежесекундно. И Kbyte.Ru в этом плане не исключение, на сайте столько всего произошло, столько всего, что многое даже и не влезло в этот выпуск! И кто только придумал ограничения скорости интернет-соединения и объемов писем! Эх..., благо на сайте есть живая лента событий, которая не даст потеряться среди гущи событий.
Надеюсь, этот выпуск будет интересен для вас. Если вы хотите увидеть в следующих выпусках что-то конкретное, напишите мне об этом на ящик subscribe@kbyte.ru.


Содержание выпуска

Читайте в этом выпуске:

Если у вас есть вопросы по программированию или работе с компьютером, не стесняйтесь, спрашивайте.

Блог Kbyte.Ru

Kbyte.Ru - шесть лет!

Друзья, завтра Kbyte.Ru исполняется шесть лет!
[cut]
За год проект сильно преобразился, появилось много нового контента, увеличилась аудитория сайта.

Главным образом, все улучшения были направлены на упрощение работы с сайтом. Это дало свои, как положительные, так и отрицательные результаты. За счет упрощения процедуры регистрации, на сайте появилось много новых объявлений о работе, на форумах пользователи стали чаще пользоваться смайликами и указывать языки программирования. Но в тоже время на сайте увеличилось число спама, хотя большинство подобного рода сообщений блокируется автоматически.

Если оглянуться назад, из активных пользователей, за минувший год, я могу вспомнить [i]Pro, который умудрился найти XSS-уязвимость на страницах сайта, при том, что вопросам безопасности я уделяю существенное внимание. Помимо этого, [i]Pro написал статью на тему создания красивых всплывающих окошек в Windows Forms, а также добавил на сайт исходные коды. А Shark1 разнообразил Kbyte.Ru примерами на тему Windows Presentation Foundation.
Пользователь ArkIv, с одной стороны, весь год ходил на грани попадания под санкции за провоцирование конфликтов на форуме, а с другой, пополнил копилку Kbyte.Ru новыми исходными кодами.

Если говорить о будущем, то я решил, что технически не буду улучшать текущую версию проекта, по крайней мере, делать грандиозные изменения точно. Хотя у меня периодически возникает такое желание, но вот буквально на днях это желание переросло в концепцию новой версии Kbyte.Ru. Не знаю, смогу ли я в очередной раз переписать сайт, так что обещать ничего не буду. Тем не менее, если у вас есть предложения или виденье будущего Kbyte.Ru, вы можете их писать в комментарии, либо на форуме (создать новую тему на эту тему), либо присылать мне.
В текущей версии мне не нравится сложность навигации по сайту, слишком большое число разделов. Система рейтинга непрозрачная, полагаю, вам непонятно откуда он берется и в каком количестве, хотя вывести статистику я могу хоть сейчас, эти данные всегда логировались, но тем не менее, система рейтинга требует пересмотра.

По традиции, наиболее активных пользователей в честь дня рождения Kbyte.Ru ждут подарки. В этом году в качестве подарков будут только фирменные чашки Kbyte.Ru. Дизайн чашек отличается от прошлогоднего. Фотографию показать не могу, ибо я еще сам не видел, что получилось. Поставщик затянул отправку, но надеюсь, что к 20-25 февраля чашки уже будут у меня, ну а к середине марта у счастливых обладателей эксклюзивных подарков.

Фирменная чашка Kbyte.Ru:
1. [i]Pro
2. Shark1
3. artF
4. ArkIv
5. GoodBoy
6. Сергей
7. Scryaga
8. KreolzMax
9. Andrey
10. aero122

Я отдельно свяжусь с каждым из перечисленных в списке пользователей и сообщу подробности. Либо вы можете отправить мне на E-Mail adminkbyte.ru или aleksey.nemiromail.ru ваш почтовый адрес в формате: индекс, страна, регион, город или населенный пункт, номер дома, номер квартиры.

Например:
Иванов Иван Иванович
690066, Россия, Приморский край, Владивосток
ул. Ленина, дом 3, кв. 51

Фотографию чашек опубликую позже, когда получу. Следите за темой.


Выбор пользователей я делал на основе активности на протяжении 2011 года. В отличие от предыдущего года, когда я смотрел статистику включительно до 13 февраля, в этом году я использовать только данные с 1 января по 31 декабря 2011 года. Так удобней и так будет всегда. Под активностью подразумевается публикация сообщений в общедоступные форумы Kbyte.Ru на протяжении 12 месяцев. А также, размещение статей и исходных кодов на сайте, добавление комментариев. Если вы считаете, что вашего имени не хватает в этом списке, свяжитесь со мной.


Поздравляю всех с праздником!
Спасибо всем, что вы с Kbyte.Ru!


--
Алексей Немиро
12 февраля 2012 г.
Kbyte.Ru

[- к содержанию -]

Форумы Kbyte.Ru

На форумах Kbyte.Ru постоянно появляются новые интересные темы и обсуждения. В этом выпуске представлены лишь новые темы, с момента прошлой рассылки.

Кстати, любой желающий может на форумах Kbyte.Ru совершенно свободно получить помощь грамотных специалистов в области программирования, да и в целом информационных технологий.

Задать свой вопрос прямо сейчас

Продолжая традицию регулярных веб-семинаров по актуальных вопросам управления корпоративным контентом, компания ЭОС объявляет о старте нового цикла семинаров по использованию платформы еDocLib для ИТ-специалистов и разработчиков. Первый семинар, «Быстрая разработка учетных приложений с помощью платформы eDocLib», состоится 21го февраля 2012 года. В рамках семинара будут рассмотрены возможности использования средств быстрой разработки на различных этапах создания приложения, а также архитектура и возможности платформы eDocLib. Во время практической части семинара, будут наглядно продемонстрированы возможности платформы для разработки учетной системы на примере системы учета заявок ( helpdesk) и возможности использования облачного сервиса eDocLib для хранения и обработки данных при разработке мобильных приложений.

Быстрая разработка учетных приложений c помощью платформы eDocLib

Предварительная программа семинара

Теоретическая часть

1. Актуальные тренды в управлении информацией. Потребности бизнеса в управлении информацией и возможные способы их реализации.
2. От задачи – к работающей системе. Использование средств быстрой разработки на различных этапах создания приложения.
3. Архитектура и возможности платформы eDocLib для быстрой разработки.
4. Возможности интеграции eDocLib с различными приложениями. API-интерфейс и схемы обмена данными.
5. Возможности использования облачного сервиса eDocLib для разработки мобильных приложений.
Перерыв.

Практическая часть

1. Программирование без программирования. Работающая система за один час на примере системы учета заявок (helpdesk)
2. Пример разработки мобильного приложения, использующего облачный сервис eDocLib для хранения и обработки данных.

Зарегистироваться на мероприятие можно по адресу http://www.eos.ru/eos_calendar/register.php

[- к содержанию -]

Здравствуйте, дорогие наши Волшебники!

С Праздником вас всех!!!

Есть у меня такая беда: посетитель закачивает картинку на сервер, а потом я ВРУЧНУЮ добавляю превьюшку к этой самой картинке...

Может ли кто-нибудь из присутствующих здесь Мужчин гармонично вписать код в уже имеющуюся страницу, чтобы при закачке картинки сохранялась и превьюшка с размером 150 пикселей по большей стороне? Интересует формат JPG.

Сейчас код страницы такой:

<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDB" %>
<script runat=server>
Sub SubmitUploadFile(ByVal sender As Object, ByVal e As EventArgs)
	Dim strFileName, strRootUpload, strUniqueName, PathToUploadFile, CheckFile As String 
	Dim Index As Integer
	If Not (frmFileUpload.PostedFile Is Nothing) then 
	Try 
		strFileName = frmFileUpload.PostedFile.FileName 
	If strFileName <> "" then 
		strFileName = strFileName.Replace("/", "\")
		Index = strFileName.LastIndexOf("\")
		strFileName = strFileName.Substring(Index + 1)
		strRootUpload = Server.MapPath("pictures")
		strUniqueName = "picture_big.jpg"
		frmFileUpload.PostedFile.SaveAs(strRootUpload & "\" & strUniqueName)
		Response.Redirect("pictures/picture_big.jpg")
	End If
	Catch
	End Try
	End If
End Sub
</script>
<html>
<body>
<form runat="server">
<center>
		<table>
			<tr> 
				<td>
				<Input ID="frmFileUpload" Type="File" runat="server"><br><br>
				<asp:Button ID="btnUploadFile" Text="загрузить файл" Type="Submit" OnClick="SubmitUploadFile" runat="server" />
				</td>
			</tr>
		</table>
</center>
</form>
</body>
</html>

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 14.02.2012 14:26
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDB" %>
<%@ Import Namespace="System.IO" %>
<script runat=server>
  Sub SubmitUploadFile(ByVal sender As Object, ByVal e As EventArgs)
    Dim strFileName, strRootUpload, strUniqueName, PathToUploadFile, CheckFile As String
    Dim Index As Integer
    If Not (frmFileUpload.PostedFile Is Nothing) Then
      Try
        Dim DI As New DirectoryInfo(Server.MapPath("~/pictures"))
        If Not DI.Exists Then DI.Create() 'если папки нет, создаем

        'уникальное имя файла можно сделать из GUID
        Dim gid As Guid = Guid.NewGuid
        strUniqueName = String.Format("{0}.jpg", gid)
        
        'кодеки
        Dim myEncoder As System.Drawing.Imaging.Encoder = System.Drawing.Imaging.Encoder.Quality
        Dim myEncoderParameter As System.Drawing.Imaging.EncoderParameter
        Dim myEncoderParameters As New System.Drawing.Imaging.EncoderParameters(1)
        Dim myImageCodecInfo As System.Drawing.Imaging.ImageCodecInfo
        myImageCodecInfo = GetEncoderInfo(System.Drawing.Imaging.ImageFormat.Jpeg)
        myEncoderParameter = New System.Drawing.Imaging.EncoderParameter(myEncoder, CType(75L, Integer)) '75 - качество изображение, от 0 до 100
        myEncoderParameters.Param(0) = myEncoderParameter
                
        'оригинальный размер
        Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(frmFileUpload.PostedFile.InputStream)
        img.Save(Path.Combine(DI.FullName, strUniqueName),myImageCodecInfo, myEncoderParameters)
        'frmFileUpload.PostedFile.SaveAs(Path.Combine(DI.FullName, strUniqueName)) 'папка  /pictures + имя файла
                
        'превьюшка
        strUniqueName = String.Format("{0}-preview.jpg", gid) 'к имени файла добавляем слово preview
        
        'без сохранения пропорций
        'img.GetThumbnailImage(150, 150, Nothing, IntPtr.Zero).Save(Path.Combine(DI.FullName, strUniqueName), myImageCodecInfo, myEncoderParameters)
        
        'с сохранением пропорций
        Dim bmp As New System.Drawing.Bitmap(150, 150) 'холст размером 150x150px
        
        Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bmp)
        Dim rec As New System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height)
        g.FillRectangle(System.Drawing.Brushes.White, rec) 'заполняем холст белым фоном
        
        If img.Width > bmp.Width OrElse img.Height > bmp.Height Then
          Dim nW As Double = 0, nH As Double = 0
          Dim r As Double = 0
          Dim newW As Integer = 0, newH As Integer = 0
          nW = img.Width / bmp.Width
          nH = img.Height / bmp.Height
          r = Math.Max(nW, nH)
          newW = Convert.ToInt32(img.Width / r) : newH = Convert.ToInt32(img.Height / r)

          Dim tmp As System.Drawing.Image = img.GetThumbnailImage(newW, newH, Nothing, IntPtr.Zero)
          Dim paintX As Integer = Convert.ToInt32((bmp.Width - newW) / 2), paintY As Integer = Convert.ToInt32((bmp.Height - newH) / 2)
          g.DrawImage(tmp, paintX, paintY, newW, newH)

        Else
          
          Dim paintX As Integer = Convert.ToInt32((bmp.Width - img.Width) / 2), paintY As Integer = Convert.ToInt32((bmp.Height - img.Height) / 2)
          g.DrawImage(img, paintX, paintY, img.Width, img.Height)
          
        End If
        
        'сохраняем превьюшку
        bmp.Save(Path.Combine(DI.FullName, strUniqueName), myImageCodecInfo, myEncoderParameters)

        
        Response.Redirect(String.Format("~/pictures/{0}.jpg", gid))
        
      Catch ex As Exception
        Response.Write(ex.ToString())
      End Try
    End If
  End Sub
  
  'функция для установки качества (степени сжатия) JPEG
  Private Function GetEncoderInfo(ByVal format As System.Drawing.Imaging.ImageFormat) As System.Drawing.Imaging.ImageCodecInfo
    Dim j As Integer
    Dim encoders() As System.Drawing.Imaging.ImageCodecInfo
    encoders = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()
    j = 0
    While j < encoders.Length
      If encoders(j).FormatID = format.Guid Then
        Return encoders(j)
      End If
      j += 1
    End While
    Return Nothing
  End Function 'GetEncoderInfo
</script>
<html>
<body>
<form id="Form1" runat="server">
<center>
		<table>
			<tr> 
				<td>
				<Input ID="frmFileUpload" Type="File" runat="server"><br><br>
				<asp:Button ID="btnUploadFile" Text="загрузить файл" Type="Submit" OnClick="SubmitUploadFile" runat="server" />
				</td>
			</tr>
		</table>
</center>
</form>
</body>
</html>

[- к содержанию -]

Ответ #2 @Ann 14.02.2012 19:53
Вау... )))
Алексей, спасибо огромное, все работает! Даже удивительно... )))
Не сочтите за наглость...
А можно все тоже самое, только без заливки свободного пространства белым цветом...
То есть, если оригинал 600х450, то превью - 150х100, а если оригинал 450х600, то превью 100х150.
Можно так?

[- к содержанию -]

Ответ #3 @Aleksey Nemiro 15.02.2012 11:43
  Sub SubmitUploadFile(ByVal sender As Object, ByVal e As EventArgs)
    Dim strFileName, strRootUpload, strUniqueName, PathToUploadFile, CheckFile As String
    Dim Index As Integer
    If Not (frmFileUpload.PostedFile Is Nothing) Then
      Try
        Dim DI As New DirectoryInfo(Server.MapPath("~/pictures"))
        If Not DI.Exists Then DI.Create() 'если папки нет, создаем

        'уникальное имя файла можно сделать из GUID
        Dim gid As Guid = Guid.NewGuid
        strUniqueName = String.Format("{0}.jpg", gid)
        
        'кодеки
        Dim myEncoder As System.Drawing.Imaging.Encoder = System.Drawing.Imaging.Encoder.Quality
        Dim myEncoderParameter As System.Drawing.Imaging.EncoderParameter
        Dim myEncoderParameters As New System.Drawing.Imaging.EncoderParameters(1)
        Dim myImageCodecInfo As System.Drawing.Imaging.ImageCodecInfo
        myImageCodecInfo = GetEncoderInfo(System.Drawing.Imaging.ImageFormat.Jpeg)
        myEncoderParameter = New System.Drawing.Imaging.EncoderParameter(myEncoder, CType(75L, Integer)) '75 - качество изображение, от 0 до 100
        myEncoderParameters.Param(0) = myEncoderParameter
                
        'оригинальный размер
        Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(frmFileUpload.PostedFile.InputStream)
        img.Save(Path.Combine(DI.FullName, strUniqueName),myImageCodecInfo, myEncoderParameters)
        'frmFileUpload.PostedFile.SaveAs(Path.Combine(DI.FullName, strUniqueName)) 'папка  /pictures + имя файла
                
        'превьюшка
        strUniqueName = String.Format("{0}-preview.jpg", gid) 'к имени файла добавляем слово preview
        
        'без сохранения пропорций
        'img.GetThumbnailImage(150, 150, Nothing, IntPtr.Zero).Save(Path.Combine(DI.FullName, strUniqueName), myImageCodecInfo, myEncoderParameters)
        
        Dim needWidth As Integer = 150, needHieght As Integer = 150 'максимально допустимый размер
        Dim nW As Double = img.Width / needWidth
        Dim nH As Double = img.Height / needHieght
        Dim r As Double = Math.Max(nW, nH)
        Dim newW As Integer = Convert.ToInt32(img.Width / r), newH As Integer = Convert.ToInt32(img.Height / r)

        Dim img2 As System.Drawing.Image = img.GetThumbnailImage(newW, newH, Nothing, IntPtr.Zero)

        'сохраняем превьюшку
        img2.Save(Path.Combine(DI.FullName, strUniqueName), myImageCodecInfo, myEncoderParameters)

        
        Response.Redirect(String.Format("~/pictures/{0}.jpg", gid))
        
      Catch ex As Exception
        Response.Write(ex.ToString())
      End Try
    End If
  End Sub

[- к содержанию -]

Ответ #4 @Ann 15.02.2012 13:46
Спасибо, Алексей!!!
Безусловно, это самая лучшая из вчерашних валентинок!!!

[- к содержанию -]

Добавить свой ответ в эту тему
Создаю базу данных и одной из форм я добавляю картинку в PictureBox
С кодом:

private void button3_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "JPEG Images|*.jpg|GIF Images|*.gif|BITMAPS|*.bmp|All|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
String sFileName = openFileDialog1.FileName;
pictureBox1.Image = Image.FromFile(sFileName);
}
}
как сделать штаб эту картинку сохранили в базе?
а патом показывали ее когда в DateGridе вазму эту запись , а когда другую запись там уже показавали бы уже другую картинку.
добавляю вес код 2 форм
1. Вод:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FilmaiDB2
{
    public partial class Naujas_filmas : Form
    {
        public Naujas_filmas()
        {
            InitializeComponent();
        }
        private void Naujas_filmas_Load(object sender, EventArgs e)
        {
            this.fILMAITableAdapter.Fill(this.filmaiDB_DATA.FILMAI);
        }
        //Вод
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                this.fILMAITableAdapter.Insert(KodasTextBox.Text, OfPavTextBox.Text, LTPavTextBox.Text, ZanrasTextBox.Text, DateTime.Parse(LeidimoMetaiTextBox.Text), short.Parse(TrukmeTextBox.Text),pictureBox1.Image);
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Klaida įvedant filmą.\n\nDetalesnė informacija:" + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "JPEG Images|*.jpg|GIF Images|*.gif|BITMAPS|*.bmp|All|*.*";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                String sFileName = openFileDialog1.FileName;
                pictureBox1.Image = Image.FromFile(sFileName);
            }
        }
    }
}

2.Редактироват/удалит
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FilmaiDB2
{
    public partial class Filmai : Form
    {
        public Filmai()
        {
            InitializeComponent();
            dataGridView1.SelectionChanged += new EventHandler(dataGridView1_SelectionChanged);
        }
        //----------------------------------------------
        private void Filmai_Load(object sender, EventArgs e)
        {
            this.fILMAITableAdapter.Fill(this.filmaiDB_DATA.FILMAI);
        }
        void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            // Заполнейт текс бокс
            if (dataGridView1.SelectedRows.Count > 0)
            {
                try
                {
                    string kodas = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                    FilmaiDB_DATA.FILMAIRow row = this.filmaiDB_DATA.FILMAI.FindByFILMO_KODAS(kodas);

                    KodasTextBox.Text = row.FILMO_KODAS;
                    OficialusPavTextBox.Text = row.OFICIALUS_PAVADINIMAS;
                    LTPavTextBox.Text = row.LIETUVISKAS_PAVADINIMAS;
                    ZanrasTextBox.Text = row.ZANRAS;
                    LeidimoMetaiTextBox.Text = row.LEIDIMO_METAI.ToShortDateString();
                    TrukmeTextBox.Text = row.TRUKME.ToString(); ;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Klaida gaunant duomenis.\n\nDetalesnė informacija: " + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                KodasTextBox.Clear();
                OficialusPavTextBox.Clear();
                LTPavTextBox.Clear();
                ZanrasTextBox.Clear();
                LeidimoMetaiTextBox.Clear();
                TrukmeTextBox.Clear();
            }
        }
        //Удалит
        private void button2_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                try
                {
                    string kodas = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                    FilmaiDB_DATA.FILMAIRow row = this.filmaiDB_DATA.FILMAI.FindByFILMO_KODAS(kodas);
                    this.fILMAITableAdapter.Delete(KodasTextBox.Text, OficialusPavTextBox.Text, LTPavTextBox.Text, ZanrasTextBox.Text, DateTime.Parse(LeidimoMetaiTextBox.Text), short.Parse(TrukmeTextBox.Text));
                    this.fILMAITableAdapter.Fill(this.filmaiDB_DATA.FILMAI);
                    MessageBox.Show("Filmas ištrintas sėkmingai");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Klaida trinant filmą.\n\nDetalesnė informacija: " + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
        //Сохранит изменения
        private void button1_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                try
                {
                    string kodas = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                    FilmaiDB_DATA.FILMAIRow row = this.filmaiDB_DATA.FILMAI.FindByFILMO_KODAS(kodas);
                    row.OFICIALUS_PAVADINIMAS = OficialusPavTextBox.Text;
                    row.LIETUVISKAS_PAVADINIMAS = LTPavTextBox.Text;
                    row.ZANRAS = ZanrasTextBox.Text;
                    row.LEIDIMO_METAI = DateTime.Parse(LeidimoMetaiTextBox.Text);
                    row.TRUKME = short.Parse(TrukmeTextBox.Text);
                    this.fILMAITableAdapter.Update(row);
                    MessageBox.Show("Pakeitimai išsaugoti sėkmingai");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Pakeitimai neišsaugoti.\n\nDetalesnė informacija:" + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    }
}
в БД Oracle создал таблицу
"NUOTRAULA" BLOB NOT NULL);
ради картинки
тока вот как ее там засунут я не знаю помогите если можете.
фото как выгледит формы:
картинка
што вам еше над? штоб памоч мне?
Если возможна так хоть с вдовам данных помогите уж удалит и редактировать сам сделаю
я очини прошу подскажите как. Либо мой код отредактируйте совсем супер будет

либо как сделат штоб при нажатие кнопки фаил сохранился указанам месте
а дб берет тока линк к етаму фаилу

ну ета што луче и што легче буду раз если помагите

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 14.02.2012 12:42
Картинки лучше в базе не хранить, это может негативно отразиться на производительности, когда данных будет много.

Если сохранять ссылку на выбранную картинку, то при выборе файла картинки нужно запомнить путь к файлу. Для этого можно использовать, например, свойство Tag, которые есть у всех элементов управления.
private void button3_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "JPEG Images|*.jpg|GIF Images|*.gif|BITMAPS|*.bmp|All|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
String sFileName = openFileDialog1.FileName;
pictureBox1.Image = Image.FromFile(sFileName);
pictureBox1.Tag = sFileName;//запоминаем путь к файлу картинки
}
}

Соответственно, при сохранении данных нужно записывать в бузу путь к файлу из свойства Tag.
  //Сохранить изменения
  private void button1_Click(object sender, EventArgs e)
  {
   if (dataGridView1.SelectedRows.Count > 0)
   {
    try
    {
     string kodas = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
     FilmaiDB_DATA.FILMAIRow row = this.filmaiDB_DATA.FILMAI.FindByFILMO_KODAS(kodas);
     row.OFICIALUS_PAVADINIMAS = OficialusPavTextBox.Text;
     row.LIETUVISKAS_PAVADINIMAS = LTPavTextBox.Text;
     row.ZANRAS = ZanrasTextBox.Text;
     row.LEIDIMO_METAI = DateTime.Parse(LeidimoMetaiTextBox.Text);
     row.TRUKME = short.Parse(TrukmeTextBox.Text);
     row.KARTINKA = pictureBox1.Tag.ToString(); // в таблице должно быть текстовое поле с именем KARTINKA
     this.fILMAITableAdapter.Update(row);
     MessageBox.Show("Pakeitimai išsaugoti sėkmingai");
    }
    catch (Exception ex)
    {
     MessageBox.Show("Pakeitimai neišsaugoti.\n\nDetalesnė informacija:" + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
   }
  }
Загрузка данных:
  void dataGridView1_SelectionChanged(object sender, EventArgs e)
  {
   // Заполнение текст бокс
   if (dataGridView1.SelectedRows.Count > 0)
   {
    try
    {
     string kodas = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
     FilmaiDB_DATA.FILMAIRow row = this.filmaiDB_DATA.FILMAI.FindByFILMO_KODAS(kodas);

     KodasTextBox.Text = row.FILMO_KODAS;
     OficialusPavTextBox.Text = row.OFICIALUS_PAVADINIMAS;
     LTPavTextBox.Text = row.LIETUVISKAS_PAVADINIMAS;
     ZanrasTextBox.Text = row.ZANRAS;
     LeidimoMetaiTextBox.Text = row.LEIDIMO_METAI.ToShortDateString();
     TrukmeTextBox.Text = row.TRUKME.ToString();

     // если в поле KARTINKA не будет данных, то при попытке загрузить картинку произойдет ошибка
     // необходимо проверять наличие данных в поле KARTINKA (в этом примере код проверки закомментирован - данные не проверяются)
     //if(row.KARTINKA != DBNull.Value && !String.IsNullOrEmpty(row.KARTINKA.ToString())){
     pictureBox1.Image = Image.FromFile(row.KARTINKA.ToString()); // путь к картинке находится в текстовом поле с именем KARTINKA
     pictureBox1.Tag = row.KARTINKA;//запоминаем путь к файлу картинки, чтобы можно было сохранить изменения
     //}
    }
    catch (Exception ex)
    {
     MessageBox.Show("Klaida gaunant duomenis.\n\nDetalesnė informacija: " + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
   }
   else
   {
    KodasTextBox.Clear();
    OficialusPavTextBox.Clear();
    LTPavTextBox.Clear();
    ZanrasTextBox.Clear();
    LeidimoMetaiTextBox.Clear();
    TrukmeTextBox.Clear();
   }
  }
Путь к картинке может быть относительным (относительно корневого каталога программы).


Если все же требуется сохранять саму картинку в базу, то для этого нужно использовать поле соответствующего типа. С Oracle я не знаком, но наверное нужно использовать поле типа BFILE, или CLOB/NCLOB. CLOB/NCLOB - если сохранять картинки в текстовом виде, преобразованные в Base64. Что касается BFILE, то я полагаю, в C# это будет массив байт. Загрузить (поместить в PictureBox) картинку из массива байт (и базы, из поля BFILE) можно через функцию Image.FromStream.
pictureBox1.Image = Image.FromStream(New System.IO.MemoryStream(row.KARTINKA_BFILE));
Сохранить в базу в виде массива байт:
//row.KARTINKA_BFILE = System.IO.File.ReadAllBytes("C:\полный путь к файлу картинки");
row.KARTINKA_BFILE = System.IO.File.ReadAllBytes(pictureBox1.Tag.ToString()); // это самый простой вариант

// но вообще, картинка уже есть в памяти и ее можно прямо из PictureBox записать в массив байт
MemoryStream m = new MemoryStream();
pictureBox1.Image.Save(m, System.Drawing.Imaging.ImageFormat.Png); //сохранили картинку в формате png в MemoryStream
row.KARTINKA_BFILE = m.ToArray(); // преобразуем MemoryStream в массив байт

[- к содержанию -]

Ответ #2 @FooX 14.02.2012 18:48
Вот спс еше 1 вапрос как сделат так штоб при кнопке сохранит даны
картинка из 1 каталога переместился в другой?
тоесть например у меня была картинка C://ProgramsFile/pictures
а я хочю все картинка сохранят вадном месте например D://PictureBaza
как мне изминит где будет сохраняца картинки?

[- к содержанию -]

Ответ #3 @Aleksey Nemiro 14.02.2012 19:29
Переместить файл можно так:
System.IO.File.Move(@"C:\Старый файл.jpg", @"D:\Новый файл.jpg");
Копировать:
System.IO.File.Copy(@"C:\Источник.jpg", @"D:\Копия.jpg");
либо через FileInfo:
System.IO.FileInfo FI = new System.IO.FileInfo(@"C:\файл.jpg");
//FI.MoveTo(@"D:\новый файл.jpg");
//FI.CopyTo(@"D:\копия.jpg");
См. также Работа с файлами в C#

[- к содержанию -]

Ответ #4 @FooX 14.02.2012 21:44
А мне Tаg ставит на кнопки или на форму картинки?

[- к содержанию -]

Ответ #5 @FooX 15.02.2012 02:32
Еррор
:System.Drawing.Bitmap
на
pictureBox2.Image = Image.FromFile(row.NUOTRAULA.ToString());
почиму и как его изправит?

[- к содержанию -]

Добавить свой ответ в эту тему · В теме есть еще 8 ответов. Смотреть все ответы.
Вакансия: Программист Linux для встроенных систем

Направление: компания -ведущий российский разработчик и производитель телекоммуникационного оборудования, решений для сетей передачи данных.

Должностные обязанности: разработка программного обеспечения для встроенных систем; документирование, CVS.

Требования к специалисту:
-высшее техническое образование
-опыт работы от 3 лет;
-знание GNU toolchain, языка С, Shell, элементной базы и протоколов для телекоммуникаций

Условия и компенсации:
Работа в ведущей телекоммуникационной компании, место работы- 20 км от МКАД (север)
м.Речной вокзал, Митино, Петровско-Разумовская, Комсомольская,Рижская -прямой транспорт
Оклад от 60000 руб.+премии+соц.пакет
Оформление по ТК

Резюме можно отправлять по адресу:
profi2@profipersonal.ru

Контактное лицо:
Аникеева Анна
(495) 225-01-23
+7(926) 151-88-86

[- к содержанию -]

Помогите с написанием vba макроса или др. средствами извлечения информации из почтовых сообщений от определенных отправителей получаемых Аутлук Эксчейндж

[- к содержанию -]

В моём приложении в элементе управления checkedlistbox появляется список файлов, которые необходимо удалить и создаётся новый список.
При нажатии кнопки, определённые файлы удаляются, далее программа переводит в listbox новый спмсок файлов этим кодом:
 Dim i As Integer
  'перевод в ListBox1
  For i = 0 To CheckedListBox1.CheckedItems.Count - 1
   rootform.ListBox1.Items.Add(CheckedListBox1.CheckedItems(i))
  Next i
  If rootform.ListBox1.Items.Count > 0 Then
  End If
Но строки "C:\Games\data\maps\props.img" должны превратиться в "IMG platform:/DATA/MAPS/PROPS.IMG" и так со всеми строками
Вроде мысли есть на счёт кода, но получается провальная реализация.
Помогите

[- к содержанию -]

Все темы и обсуждения

Исходные коды

ListBox_Control_Template

XAML: Интерфейс @Shark1 12.02.2012 21:41
Пример шаблона элемента управления ListBox,
стилизованного под меню ресторана.

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Обработка данных при работе с DataGridView

Visual Basic .NET: Работа с XML/XSL @Scryaga 05.02.2012 15:40
Пример показывает, как введённые данные (включая фото) в ячейки DataGridView можно сохранить в XML-файл, созданный приложением автоматически. При новом запуске вся таблица сохранённых данных будет отображена в ячейках DataGridView.
Imports System.IO

Public Class Form1

 Dim dt As DataTable = New DataTable("Таблица данных")
 Dim ds As New Data.DataSet("mmyDataSet")
 
 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  Me.Size = New Size(880, 700)
  ''-----Внедряем колонку для отображения картинок
  Dim cellPhoto(0) As Data.DataColumn
  cellPhoto(0) = dt.Columns.Add("ФОТО", GetType(Byte()))
  '-----------Добавляем другие столбцы данных
  dt.Columns.Add("Номер", GetType(Integer))
  dt.Columns.Add("Имя", GetType(String))
  dt.Columns.Add("Дата", GetType(Date))
  ' Добавить объект dt в DataSet:
  ds.Tables.Add(dt)
  If IO.File.Exists("tabl.xml") = False Then
   DataGridView1.DataSource = dt
    dt.Rows.Add()
  Else ' Если XML-файл ЕCТЬ:

   ds.ReadXmlSchema("tablSchema.xml")
   ds.ReadXml("tabl.xml")

   DataGridView1.DataMember = "Таблица данных"
   DataGridView1.DataSource = ds
  End If

 End Sub

 Private Sub Save_bttn_Click(sender As System.Object, e As System.EventArgs) Handles Save_bttn.Click

  'dt.TableName = "Таблица данных"
  'ds.WriteXmlSchema("tablSchema.xml")
  'ds.WriteXml("tabl.xml")
  ''-----Данные можно вывести в XML-файл из объекта DataTable напрямую,без применения объекта DataSet
  dt.WriteXml("tabl.xml")
  '-----Получить схему,соответствующую экспортируемым данным
  dt.WriteXmlSchema("tablSchema.xml")
 End Sub

 Private Sub ЗагрузитьФотоToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles ЗагрузитьФотоToolStripMenuItem.Click

  Dim myStream As Stream
  Dim myopenFileDialog As New OpenFileDialog
  myopenFileDialog.InitialDirectory = "C:\"
  myopenFileDialog.Filter = "Images|*.GIF;*JPG;*JPEG;*.TIF;*BMP"
  myopenFileDialog.FilterIndex = 2
  myopenFileDialog.RestoreDirectory = True

  If myopenFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
   myStream = myopenFileDialog.OpenFile()
   If Not (myStream Is Nothing) Then
    Me.DataGridView1.CurrentCell.Value = Image.FromFile(myopenFileDialog.FileName)
    myStream.Close()
   End If
  End If
 End Sub

 Private Sub Load_btn_Click(sender As System.Object, e As System.EventArgs) Handles Load_btn.Click
  Dim myStream As Stream
  Dim myopenFileDialog As New OpenFileDialog
  myopenFileDialog.InitialDirectory = "C:\"
  myopenFileDialog.Filter = "Images|*.GIF;*JPG;*JPEG;*.TIF;*BMP"
  myopenFileDialog.FilterIndex = 2
  myopenFileDialog.RestoreDirectory = True

  If myopenFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
   myStream = myopenFileDialog.OpenFile()
   If Not (myStream Is Nothing) Then
    Me.DataGridView1.CurrentCell.Value = Image.FromFile(myopenFileDialog.FileName)
    myStream.Close()
   End If
  End If

 End Sub
 Private Sub dataGridView1_CellFormatting(ByVal sender As Object, _
  ByVal e As DataGridViewCellFormattingEventArgs) _
  Handles DataGridView1.CellFormatting
  
  If Me.DataGridView1.Columns(e.ColumnIndex).Name = "Дата" Then
   ShortFormDateFormat(e)
  End If
 End Sub

 'Even though the date internaly stores the year as YYYY, using formatting, the
 'UI can have the format in YY. 
 Private Shared Sub ShortFormDateFormat(ByVal formatting As DataGridViewCellFormattingEventArgs)
  If formatting.Value IsNot Nothing Then
   Try
    Dim dateString As System.Text.StringBuilder = New System.Text.StringBuilder()
    Dim theDate As Date = DateTime.Parse(formatting.Value.ToString())

    dateString.Append(theDate.Month)
    dateString.Append(".")
    dateString.Append(theDate.Day)
    dateString.Append(".")
    dateString.Append(theDate.Year.ToString().Substring(0))
    formatting.Value = dateString.ToString()
    formatting.FormattingApplied = True
   Catch notInDateFormat As FormatException
    ' Set to false in case there are other handlers interested trying to
    ' format this DataGridViewCellFormattingEventArgs instance.
    formatting.FormattingApplied = False
   End Try
  End If
 End Sub

 Private Sub ВыходToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs)
  MsgBox("Ну, что,- до свидания?")
  Dim counter As Integer
  For counter = 90 To 10 Step -10
   Me.Opacity = counter / 100
   Me.Refresh()
   Threading.Thread.Sleep(50)
  Next counter
  Me.Close()
 End Sub

End Class)
 Dim ds As New Data.DataSet(tabl.xml

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Все исходные коды

Вакансии в IT

Разработчик сайтов

Россия, Москва | Работа в офисе | 35 000.00 RUB

Ведущий разработчик SQL Server

Россия, Москва | Работа в офисе | 110 000.00 RUB

Flash-разработчик (разработчик видео-решений)

Россия, Москва | Работа в офисе

Инженер-программист Linux

Россия, Москва | Работа в офисе | 60 000.00 RUB

Инженер-программист BIOS

Россия, Москва | Работа в офисе

Программист

Россия, Москва | Работа в офисе | 40 000.00 RUB

Программист Delphi

Россия, Москва | Работа в офисе | 30 000.00 RUB

Офисный программист

Россия, Москва | Работа в офисе | 70 000.00 RUB

Программист

Россия, Москва | Работа в офисе | 120 000.00 RUB

Программист

Россия, Москва | Работа в офисе | 3 000.00 USD

Все вакансии в IT · Создать резюме

[- к содержанию -]

Новости мира IT

Twitter признался в копировании адресных книг смартфонов

Клиент Twitter копирует контакт-листы владельцев смартфонов и отсылает их на удаленный сервер, где они хранятся 18 месяцев, подтвердили представители сервиса. Это происходит, когда пользователь нажимает в программе кнопку "Поиск друзей". При этом Twitter не уведомляет пользователя об операции переноса.

16.02.2012 11:11 · Категория: Безопасность · Источник: Lenta.ru

[- к содержанию -]

Создатели Photoshop отчитались об итогах антипиратских проверок в России

За 2011 год в России было возбуждено 1073 уголовных дела против пользователей и распространителей нелегальных копий продуктов Adobe. Чаще всего в пиратстве уличали установщиков ПО, реже всего - тех, кто распространяет нелицензионное ПО через Сеть. Самыми "пиратскими" отраслями признали торговлю, фотоуслуги и рекламу.

16.02.2012 11:11 · Категория: Бизнес в IT · Источник: Lenta.ru

[- к содержанию -]

Twitter ограничил право акционеров на продажу своих бумаг

Руководство крупнейшего в мире сервиса микроблогов Twitter ограничило продажу акций для своих акционеров. Согласно новым правилам, никто из держателей акций не может продать более чем одну пятую от своей доли. Компания, таким образом, старается избежать превращения в публичную.

16.02.2012 11:10 · Категория: Бизнес в IT · Источник: Lenta.ru

[- к содержанию -]

Все новости


Подпишитесь на тематические RSS-ленты Kbyte.Ru, чтобы быть в курсе последних новостей:

Основная лента · Форумы (темы и сообщения) · Visual Basic 5.0/6.0 · Visual Basic .NET · C# (Си шарп) · Delphi · JavaScript · ActionScript · ASP .NET · ASP .NET MVC

Ищите Kbyte.Ru в социальных сетях FaceBook, ВКонтакте, Twitter.

Если вы занимаетесь программированием, то наверняка вам пригодятся хитрые инструменты.


Международный портал для программистов и разработчиков Kbyte.Ru основан в 2006 году. Целью портала является объединение программистов и специалистов IT-бизнеса, студентов и преподавателей для обмена опытом и знаниями, оказания помощи во всех делах и начинаниях в области IT.
Kbyte.Ru является парнёром компаний Mail.Ru Group, WebMoney Transfer, Ozon.Ru и др.
Выпуск рассылки подготовлен автоматически. Все права на материалы выпуска принадлежат Kbyte.Ru если иное не указано отдельно.


В избранное