Nano Hash - криптовалюты, майнинг, программирование

Как добавить изображение во время выполнения в Listview и DataGrid, используя linq to sql

У меня есть список, а также DataGrid с записями с изображениями. Моя проблема в том, что когда я пытаюсь добавить запись в список или в Datagrid, я могу добавить только строку или числа, но не могу добавить изображение. Я попытался найти его через диалоговое окно openfile и попытаться назначить ячейке datagrid, но я не знаю, чему назначать изображение во время выполнения, если я ищу изображение. Другая проблема заключается в том, что я привязывал образ Datagrid, но пытаюсь обновить его и добавить во время выполнения.

И вторая моя проблема это обновление изображения. Если кто-нибудь знает о добавлении и обновлении записи в списке, а также о шаблоне Datagrid с использованием шаблона, пожалуйста, ради Божией помощи, помогите мне, я попробую, но не могу это исправить. Если кто-то, кто является экспертом в wpf, пожалуйста, скажите мне, что ваши несколько минут могут решить мою проблему, пожалуйста.

Мой файл .xmal

<Window x:Class="UI.ViewClasses"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:UI"
    Title="ViewClasses" Height="300" Width="456" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" Loaded="Window_Loaded">
    <Window.Resources >
        <local:ImageConverter x:Key="ImageDataConverter"/>
    </Window.Resources>
    <Grid>
        <my:DataGrid ItemsSource="{Binding}" Name="DataGrid" AutoGenerateColumns="False" Margin="12,51,80,35" SelectionMode="Extended" SelectionUnit="Cell" CanUserReorderColumns="True" CanUserResizeColumns="True" 
          CanUserResizeRows="False" CanUserSortColumns="True"  IsReadOnly="False" LoadingRow="DataGrid_LoadingRow"  AlternatingRowBackground="LightBlue"

         Loaded="DataGrid_Loaded">
            <my:DataGrid.Columns>

                <my:DataGridTemplateColumn Header="     Frist Name">
                    <my:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Path=FirstName}" 
                                         Margin="-6,0,-6,0"/>
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellTemplate>
                </my:DataGridTemplateColumn>
                <my:DataGridTemplateColumn Header="   Last Name">
                    <my:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Path=LastName}" 
                                         Margin="-6,0,-6,0"/>
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellTemplate>
                </my:DataGridTemplateColumn>
                <my:DataGridTemplateColumn Header="   Gender">
                    <my:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                    <TextBox Text="{Binding Path=Gender}" 
                                         Margin="-6,0,-6,0"/>
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellTemplate>
                </my:DataGridTemplateColumn>

                    <my:DataGridTemplateColumn Header="   GPA">
                    <my:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                           <TextBox Text="{Binding Path=GPA}" 
                                         Margin="-6,0,-6,0"/>
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellTemplate>
                </my:DataGridTemplateColumn>
                    <my:DataGridTemplateColumn Header="   Image">
                    <my:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Image Height="50" Name="image1" Source="{Binding Path=MyImage, Converter={StaticResource ImageDataConverter}}" />
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellTemplate>
                </my:DataGridTemplateColumn>


            </my:DataGrid.Columns>
        </my:DataGrid>
        <Button Height="30" Margin="12,10,0,0" Name="btnAdd" VerticalAlignment="Top" HorizontalAlignment="Left" Width="75" Click="btnAdd_Click">Add</Button>
        <Button Height="30" Margin="166,10,0,0" Name="btnSave" VerticalAlignment="Top" Click="btnSave_Click" HorizontalAlignment="Left" Width="75">Save</Button>
        <Button Height="30" HorizontalAlignment="Left" Margin="92,10,0,0" VerticalAlignment="Top" Width="75" Name="btnDelete" Click="btnDelete_Click">Delete</Button>
        <Button Height="30" HorizontalAlignment="Right" Margin="0,10,112,0" Name="Browses" VerticalAlignment="Top" Width="83" Click="Browses_Click">Brows</Button>
        <TextBox Height="30" HorizontalAlignment="Right" Margin="0,10,0,0" Name="txtBrowseFile" VerticalAlignment="Top" Width="110" />
    </Grid>
</Window>

And my .xaml.cs file is 

namespace UI
{
    /// <summary>
    /// Interaction logic for ViewClasses.xaml
    /// </summary>
    public partial class ViewClasses : Window
    {
        public ViewClasses()
        {
            InitializeComponent();
        } private DataClasses1DataContext db = new DataClasses1DataContext();

        private BindingListCollectionView CustomerView;

        private void Window_Loaded(object sender, RoutedEventArgs e)
         {
             DataClasses1DataContext db = new DataClasses1DataContext();
             var custsInCA = from c in db.Students                             
                             select c;

             this.DataContext = custsInCA;
             this.CustomerView = ((BindingListCollectionView)(CollectionViewSource.GetDefaultView(this.DataContext)));

        }

        private void DataGrid_LoadingRow(object sender, Microsoft.Windows.Controls.DataGridRowEventArgs e)
        { 


        }

        private void DataGrid_Loaded(object sender, RoutedEventArgs e)
        {

        }

        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                this.db.SubmitChanges();
                MessageBox.Show("Saved");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            Student st = ((Student)(this.CustomerView.AddNew()));

            st.LastName = "<new>";
            this.CustomerView.CommitNew();
            this.DataGrid.ScrollIntoView(st);
        }

        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            if ((this.CustomerView.CurrentPosition > -1))
            {
                this.CustomerView.RemoveAt(this.CustomerView.CurrentPosition);
            }

        }

        private void Browses_Click(object sender, RoutedEventArgs e)
        {
            Image image1 = new Image();
            Microsoft.Windows.Controls.DataGrid df = new Microsoft.Windows.Controls.DataGrid(); 
            Microsoft.Win32.OpenFileDialog fileChooser = new Microsoft.Win32.OpenFileDialog();
            fileChooser.Filter = " Image files|*.jpg;*.gif;*.bmp;*.png;;*.jpeg";
            Nullable<bool> result = fileChooser.ShowDialog();
            if (result == true)

                try
                {

                    txtBrowseFile.Text = fileChooser.FileName;

                }
                catch { return; }
            if (txtBrowseFile.Text.Trim().Length != 0)
            {
                BitmapImage src = new BitmapImage();
                src.BeginInit();
                src.UriSource = new Uri(txtBrowseFile.Text.Trim(), UriKind.Relative);
                src.CacheOption = BitmapCacheOption.OnLoad;
                src.EndInit();

                image1.Source = src;
            }         
        }       
    }

    public class ImageConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter,

        System.Globalization.CultureInfo culture)
        {
            System.Data.Linq.Binary binaryData = value as System.Data.Linq.Binary;
            //System.Data.Linq.Binary binaryData = value;// here there is the first error .How convert BinaryData to Object??
            if (binaryData == null)
            {
                return null;
            }

            byte[] buffer = binaryData.ToArray();
            if (buffer.Length == 0)
            {
                return null;
            }

            BitmapImage res = new BitmapImage();
            res.BeginInit();
            res.StreamSource = new System.IO.MemoryStream(buffer);
            res.EndInit();
            return res;
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

}

Моя проблема в том, что я хочу добавить запись во время выполнения. Я могу добавить другую запись, но не могу добавить изображение, а также не могу обновить изображение во время выполнения в сетке данных. Если есть какой-либо эксперт в wpf, пожалуйста, воспроизведите мой и, если возможно, воспроизведите меня во всех подробностях, чтобы я мог понять, что у меня есть проблема с затенением электрической нагрузки в моей стране, поэтому я не могу быстро ответить вам, поэтому, пожалуйста, если возможно, ответьте мне на Мешок Божий, я просто желаю благородным людям тех, кто мне помогает.

14.01.2012

  • Я заметил, что у вас есть UriKind.Relative, указанный в свойстве URISource. Если вы возвращаете путь из диалогового окна файла, URI будет не относительным, а абсолютным. Он будет обозначать структуру диска и каталога от корня до файла. 15.01.2012
  • Это хорошо, но в чем проблема моего решения Уважаемый CodeWarrior 15.01.2012
  • Если он рассматривает путь как относительный, а не абсолютный, он будет разрешать неправильный путь. Предположим, что ваш путь — C:\MyPics\Pic1.png. Он считает, что это относительный путь, поэтому он разрешает его относительно папки, из которой запущена программа (я думаю), и поэтому он выглядит как C:\Program Files (x86)\MyProgram\C\MyPics\Pic1. png Этой картинки нет, поэтому рендерить нечего. Насколько я могу судить, то, что вы делаете, в порядке, я сам делал это раньше аналогичным образом. 16.01.2012
  • Благодаря воспроизведению, но я не могу понять свой код, который пытаюсь получить изображение из sql serber на сервере sql, мое изображение имеет тип varbinary (max). Поэтому, если я попытаюсь показать свое изображение, мне придется преобразовать его из varbinary в byte, и я думаю, что мне нужно использовать INotifyPropertyChanged, но я пытаюсь сделать это, я могу это сделать, потому что я новичок в wpf знаю свой второй вопрос в stackoverflow, который решит мой вопрос, я так думаю. Итак, если у вас есть какие-то знания об INotifyPropertyChanged, напишите для моего файла . Я буду очень благодарен вам, сэр 18.01.2012
  • В дополнение к моему сообщению ниже, я вам скажу, что мне всегда говорили, что изображения лучше размещать в файловой системе и ссылаться на них в базе данных. Особенно, если у вас много-много изображений. 18.01.2012

Ответы:


1

Ранее я опубликовал ответ с некоторой информацией о INotifyPropertyChanged.

как добавить данные в базу данных и показать их в datagrid без перезапуска программы?

Дайте мне знать, если это соответствует вашей цели, если вам требуется дополнительная помощь.

РЕДАКТИРОВАТЬ

Одна вещь, которую я бы сделал, это изменить способ работы с вашими предметами.

    DataClasses1DataContext db = new DataClasses1DataContext();
    var custsInCA = from c in db.Students                             
         select c;

    this.DataContext = custsInCA;
    this.CustomerView = ((BindingListCollectionView)(CollectionViewSource.GetDefaultView(this.DataContext)));

Обычно я использую что-то вроде этого:

public ObservableCollection<Student> Students = null;
public CollectionViewSource cvs = new CollectionViewSource;
public ViewClasses()
{
    cvs.Source = Students;
    InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    //Open Context
    DataClasses1DataContext db new DataClasses1DataContext();
    //Populate ObservableCollection with objects
    Students = 
        new ObservableCollection<Student>((from c in db.Students select c).ToList());
    //Raise PropertyChangedNotification
    OnPropertyChanged("Students");
}

И в XAML:

<my:DataGrid ItemsSource="{Binding cvs}" Name="DataGrid">

Таким образом, ваш DataGrids ItemsSource привязан непосредственно к CollectionViewSource, CollectionViewSource подается из коллекции студентов, а уведомление об изменении отправляется при обновлении коллекции студентов.

Приведенный выше код является просто тестовым кодом, возможны орфографические и пунктуационные ошибки. К сожалению, я сейчас в автобусе, а не за своим столом.

Кроме того, вы используете Entity Framework?

17.01.2012
  • @Yaqoob Abbasi Вы можете обнаружить, что дальнейшие вопросы, которые вы задаете, могут остаться без ответов. Вы еще не проголосовали и не отметили ответ. Если что-то из вышеперечисленного окажется полезным для вас, пожалуйста, дайте мне знать. Если это не так, дайте мне знать, почему, и я могу продолжить попытки помочь. 19.01.2012
  • Уважаемый CodeWarrior Когда я пытаюсь сделать это в своем отдельном проекте, это означает, что я пытаюсь воссоздать свой проект еще раз, тогда у меня есть ошибка в моем коде, которая является NOtImpelmentationException в строке изменения свойства One, пожалуйста, скажите мне, кто решит эту проблему, я буду большое спасибо вам очень очень 21.01.2012
  • И когда я пытаюсь использовать свой студенческий класс, я создаю новый класс с именем Student, как этот публичный класс Student: INotifyPropertyChanged {public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged (информация о строке) {if (PropertyChanged! = null) { PropertyChanged (это, новый PropertyChangedEventArgs (информация)); } } Затем возникает ошибка: отсутствует частичный модификатор типа wpfApplication3. 21.01.2012
  • Знайте, я понимаю, почему моя учетная запись с вопросами заблокирована для команды переполнения стека, я очень благодарен всем вам, но на самом деле я не знаю, кому использовать этот веб-сайт, я просто хочу изучить wpf, но моя учетная запись запечатана, я не знаю не знаю почему, но знаю, что понимаю, в чем моя ошибка, поэтому я извиняюсь перед всеми теми респондентами, которые ответили мне, а также извиняюсь перед командой переполнения стека, как и будет. Спасибо всем вам 22.01.2012
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..