• Как удалить выбранную строку в Datagrid?

    SpacePurr
    @SpacePurr
    c#, wpf
    DataTable Table{get; set;}
    DataAdapter dataAdapter;
    
    private void DeleteMethod(object obj)
    {
    
        var indexDataTable= //получаете здесь индекс из колонки "индекс"(например) выбранной строки
        var indexDataGridRow = //тут индекс самой строки, чтобы удалить ее из DataTable, либо вообще DataTable заново получать
    
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.Connection = new SqlConnection(connectionString);
            cmd.CommandText = "DELETE FROM YourTableName where id=" + indexDataTable;
    
            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();
        }
    
        Table.Rows[indexDataGridRow].Delete();
        Table.AcceptChanges();
        dataAdapter.Update(Table);
    }
    Ответ написан
    Комментировать
  • Как добавить несколько элементов бд, используя один запрос?

    Stalker_RED
    @Stalker_RED
    INSERT INTO tbl_name (a,b,c) 
    VALUES 
      (1,2,3),
      (4,5,6),
      (7,8,9);

    https://dev.mysql.com/doc/refman/5.5/en/insert.html
    Ответ написан
    Комментировать
  • Как сделать данную работу на c#?

    SpacePurr
    @SpacePurr
    c#, wpf
    Для примера на WPF.

    После запуска программы в окне изображается две полосы прокрутки.

    Разделим основной Grid на две строки, две колонки. По краям поместим ScrollBar, в большую часть Canvas.
    В Canvas в качестве элементов, которые должны менять позицию, возьмем Button.
    Также добавим обработчики события Button.Click и ScrollBar.Scroll.

    <Window x:Class="Toster.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:Toster"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800" MinWidth="200">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition Height="15"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition Width="15"/>
            </Grid.ColumnDefinitions>
    
            <Canvas Name="Field">
                <Button Canvas.Left="120" Canvas.Top="150" 
                        Height="50" Width="50" Click="Button_Click"/>
                <Button Canvas.Left="250" Canvas.Top="180" 
                        Height="50" Width="50" Click="Button_Click"/>
            </Canvas>
            
            <ScrollBar x:Name="VerticalScrollBar" 
                       HorizontalAlignment="Right" 
                       Grid.Column="1" Grid.Row="0" 
                       Scroll="VerticalScrollBar_Scroll"/>
            <ScrollBar x:Name="HorizontalScrollBar" 
                       Orientation="Horizontal" VerticalAlignment="Bottom" 
                       Grid.Column="0" Grid.Row="1" 
                       Scroll="HorizontalScrollBar_Scroll"/>
        </Grid>
    </Window>


    В основном классе создадим два свойства:
    1. Point SelectedPoint, в которой будут храниться координаты выбранного элемента
    2. Button SelectedButton, которая будет хранить выбранный элемент.

    ScrollBar сделаем неактивными, пока не будут выбраны объекты для перемещения.

    Наводя указатель мыши на одну из двух фигур, можно выбирать, какая из этих фигур связана с полосами прокрутки.

    В событии Button.Click ставим крестик выбранному Button. Сохраняем в свойства SelectedButton и SelectedPoint выбранный элемент и его координаты соответственно.
    Значения свойства Value у ScrollBar заполняем относительным положение Button на Canvas.

    При перемещении полосы прокрутки, создаем новую точку с обратно высчитанными координатами и присваиваем новое положение элемента на Canvas.

    public partial class MainWindow : Window
        {
            public Point SelectedPoint { get; set; }
            public Button SelectedButton { get; set; }
    
            public MainWindow()
            {
                DataContext = this;
                InitializeComponent();
    
                VerticalScrollBar.IsEnabled = false;
                HorizontalScrollBar.IsEnabled = false;
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                if (SelectedButton != null)
                    SelectedButton.Content = "";
    
                SelectedButton = sender as Button;
                SelectedButton.Content = "X";
    
                SelectedPoint = SelectedButton.TransformToAncestor(Field).Transform(new Point(0, 0));
                VerticalScrollBar.Value = SelectedPoint.Y / Field.ActualHeight;
                HorizontalScrollBar.Value = SelectedPoint.X / Field.ActualWidth;
    
                VerticalScrollBar.IsEnabled = true;
                HorizontalScrollBar.IsEnabled = true;
            }
    
            private void VerticalScrollBar_Scroll(object sender, ScrollEventArgs e)
            {
                SelectedPoint = new Point(SelectedPoint.X, VerticalScrollBar.Value * Field.ActualHeight);
                Canvas.SetTop(SelectedButton, SelectedPoint.Y);
            }
    
            private void HorizontalScrollBar_Scroll(object sender, ScrollEventArgs e)
            {
                SelectedPoint = new Point(HorizontalScrollBar.Value * Field.ActualWidth, SelectedPoint.Y);
                Canvas.SetLeft(SelectedButton, SelectedPoint.X);
            }
        }


    Пример простой, непрофессиональный, но рабочий. Остальное в ваших руках :)

    5dbf2c1f1718c377695765.gif
    Ответ написан
    Комментировать
  • C#. Как правильно вместить внешние dll в один exe?

    shai_hulud
    @shai_hulud
    Соеденить все managed (!) dll в одну dll/exe можно с помощью ILRepack.
    ILMerge мертв, его заменил ILRepack.
    Сборку можно делать Post Build Event проекта вызовом ILRepack.exe на результатам сборки.

    <Target Name="Repack" AfterTargets="BuiltProjectOutputGroup">
    		<GetFrameworkPath>
    			<Output TaskParameter="Path" PropertyName="FrameworkPath" />
    		</GetFrameworkPath>
    		<ItemGroup>
    			<NetPlatformFolders Include="$(NuGetPackageFolders.Split(';'))"></NetPlatformFolders>
    		</ItemGroup>
    		<ItemGroup>
    			<AllowDup Include="System.%2A" />
    			<AllowDup Include="JetBrains.%2A" />
    		</ItemGroup>
    		<ItemGroup>
    			<RapackTarget Include="$(TargetDir)MyDll1.dll" />
    			<RapackTarget Include="$(TargetDir)MuDll2.dll" />
    		</ItemGroup>
    		<PropertyGroup>
    			<ILRepack Condition="'$(ILRepack)' == ''">$(NuGetPackageRoot)ilrepack\2.1.0-beta1\tools\ILRepack.exe</ILRepack>
    			<ILRepackTargetPlatform Condition="'$(TargetFramework)' == 'net45'">v4,$(FrameworkPath)</ILRepackTargetPlatform>
    			<ILRepackTargetPlatform Condition="'$(TargetFramework)' == 'netstandard1.3' or '$(TargetFramework)' == 'netcoreapp2.0' or '$(TargetFramework)' == 'netstandard2.0'">v4</ILRepackTargetPlatform>
    			<IlRepackLibs Condition="'$(TargetFramework)' == 'netstandard2.0'">@(NetPlatformFolders->'"/lib:%(FullPath)\netstandard.library\2.0.0\build\netstandard2.0\ref"', ' ')</IlRepackLibs>
    			<IlRepackLibs Condition="'$(TargetFramework)' == 'netcoreapp2.0'">@(NetPlatformFolders->'"/lib:%(FullPath)\microsoft.netcore.app\2.0.0\ref\netcoreapp2.0"', ' ')</IlRepackLibs>
    			<IlRepackAllowDup>@(AllowDup->'"/allowdup:%(Identity)"', ' ')</IlRepackAllowDup>
    			<IlRepackTargets>@(RapackTarget->'"%(Identity)"', ' ')</IlRepackTargets>
    		</PropertyGroup>
    
    		<Exec Command="$(mono) &quot;$(ILRepack)&quot; /target:exe &quot;/targetplatform:$(ILRepackTargetPlatform)&quot; /union /parallel /internalize &quot;/lib:$(TargetDir.TrimEnd('\'))&quot; $(IlRepackLibs) $(IlRepackAllowDup) &quot;/out:$(TargetPath)&quot; &quot;$(TargetPath)&quot; $(IlRepackTargets)" WorkingDirectory="$(SolutionDir)" />
    
    		<Delete Files="@(RapackTarget);" />
    	</Target>


    Конечно надо всё настраивать.
    Ответ написан
    2 комментария
  • Как преобразовать string в char?

    DanielMcRon
    @DanielMcRon
    C# && Unity
    string s = "s";
    char d = s[0];
    Ответ написан
    Комментировать
  • Как задать минимальную ширину кнопки (не её содержимого)?

    SpacePurr
    @SpacePurr
    c#, wpf
    Используйте свойство MinWidth у класса Window, а не Button.
    Ответ написан
    Комментировать
  • Какие самые крупные украинские продуктовые компании?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    компаний сотни

    например, namecheap, upwork - устанешь перечислять

    смотришь, бывает, какую-нибудь чешскую траффикконтору, а там то Забарило, то Гаврилюк, то вообще на мове девки пляшут

    kTRR649syPg.jpg

    а вообще есть сайт jobs.dou.ua/companies/ ( ходить через Оперу) , выбирай и перебирай
    Ответ написан
    Комментировать
  • Почему не показывается тестовая реклама?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    ad - должно содержать в себе проверку - все ли готово и загруженно.
    нельзя просто сразу вызывать "покажи рекламу"
    во всех примерах там на апдеите ждет или подобное.

    (оно же запрашивает, грузит, кеширует..а еще может у вас интеренета нет или блокирует что-то рекламу, так что пока не будет флага "банер/видос готов к показу" - нельзя вызывать Show)

    Update
    предлагаю посмотреть вот сюда.
    пример как дождаться когда загрузится, по кол беку, для гугловой рекламы.
    https://developers.google.com/admob/unity/banner

    так же можно узнать была ли ошибка и так далее.
    Ответ написан
  • C#.Как спарсить текст со всеми совпадениями?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    yuopi, думаю уже перебор. достаю свой вариант из каментов
    using System;
    using System.Linq;
     
    namespace parse_ip
    {
        class Program
        {
            static void Main(string[] args)
            {
                var l = Console.In.ReadToEnd()
                    .Split(Environment.NewLine)
                    .Select(s => s.TrimStart('-'))
                    .Where(s => s.Contains("IP:"));
                foreach (var s in l)
                    Console.WriteLine(s);
            }
        }
    }

    .. и использование

    ps
    для работы с произвольным стримом, вставить нужный источник вместо Console.In. хоть WebResponse.GetResponseStream(), хоть сокет.
    для работы с обычным текстовым файлом, всместо Console.In.ReadToEnd().Split(Environment.NewLine), вставить File.ReadAllLines("путь+имя").
    все.
    Ответ написан
    Комментировать
  • Как заставить frame масштаббироваться так, чтобы он не обрезался границам клетки?

    AsceticSoft
    @AsceticSoft
    Xamarin-разработчик+fullstack(JavaSpring+Angular)
    Точного ответа подсказать не смогу, но могу посоветовать:
    1) убери IsClippedToBounds = "True" из frame
    2) RelativeLayout может пригодиться, т.к. он хоть и не удобный, но вроде как единственный, способный принимать события тача вне своих границ. Возможно, и с рисованием тоже получится.
    3) Учти, что на iOS рисовать за границами экрана не получится, если физический размер контрола меньше чем канвас. На андроид прокатывает, на иос - нет.
    4) Не изобретай велосипед, это дорого стоит. Есть годные контролы, на который разработчики не один год потратили. Пример: CardView
    5) В добавление к 4му пункту. Если планируются какие-то обработчики жестов на твоих вьюшках, тогда ты даже не представляешь какие у тебя за спиной ухмыляются большие, черные и мускулистые проблемы. Глянь исходники вышеприведенного контрола, какие там костыли(качественные) созданы чтобы это работало.
    Ответ написан
    Комментировать
  • Как сделать визуальный компонент?

    AsceticSoft
    @AsceticSoft
    Xamarin-разработчик+fullstack(JavaSpring+Angular)
    Берешь Frame, делаешь ему IsClippedToBounds="true" и Padding="0". Вставляешь в него StackLayout в который вкладываешь Image с Aspect="AspectFill" и две Label с разными шрифтами. Разместить можно либо в обычном ScrollView с Orientation="Horizontal" внутрь которого вкладываешь StackLayout(тот-же orientation) с BindableLayout, либо CollectionView либо какой-то HorizontalListView с NuGet
    Ответ написан
    Комментировать
  • Как бороться со стрессом на работе?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Мозг каждый день кипит так же, как в первый день. Шаг влево шаг вправо, и вот, я уже ничего не знаю и ничего не умею... ощущение, что на работе я как будто не прогрессирую, а наоборот деградирую...

    У меня такое было, когда я только перешел во фронтенд и пытался держать слишком много деталей о языках и инструментах в голове. Со временем понял, что это не имеет смысла - все меняется быстрее, чем я запоминаю. Перешел от мысли "я использую инструменты" к мысли "я делаю штуки" и сразу полегчало, стал держать в голове только общие идеи о том, как что-то делается, или что вообще бывает в какой-то области, а конкретные инструкции по применению отдельных инструментов изучаю по ходу дела. Изменил фокус своего самообразования, если это можно так назвать. В результате все препроцессоры слились в один, новые библиотеки становятся все менее сложными в освоении, поскольку идеи везде плюс-минус одинаковые и.т.д. Решения стало принимать гораздо проще. И аргументировать тоже. Иногда складывается такое впечатление, что у нас в отрасли совсем ничего не появляется нового уже лет пять, а то и больше. Да, я забываю как использовать флексы, путаю call() и apply(), гуглю свои же ответы на тостере, но это не важно. Голова занята решением проблем, в ней теперь нет никакой второстепенной информации и это очень здорово. Статьи писать тоже полезно оказалось - написал, "поставил на полочку", и забыл. А если будет нужно - можно достать и посмотреть. Таким образом вот эта вся фигня с закипанием мозгов практически ушла.
    Ответ написан
    1 комментарий
  • Как бороться со стрессом на работе?

    Zoominger
    @Zoominger
    System Integrator
    Лол, добро пожаловать в веб-программирование. Оно немного не такое радужное и весёлое, как рисуют в статечках на Хаброчке и комиксах от XKCD, да?

    Мой совет - меняйте сферу и/или место работы. Начните со второго, очевидно, это какая-то веб-студия с бесконечным потоком.

    Нет, серьёзно, смените место.
    Ответ написан
    2 комментария
  • В DataGridView появляются лишние строки после применения фильтра TreeView, как исправить?

    SpacePurr
    @SpacePurr
    c#, wpf
    На сколько я понял, лишняя строка, которая появляется - это выделенная строка в CurrencyManager.
    Я смог найти два подхода к решению этой проблемы:
    • Отключить CurrencyManager в начале метода фильтрации по дереву
      CurrencyManager currencyManager = (CurrencyManager)BindingContext [dataGridView1.DataSource];
      currencyManager.SuspendBinding();

      Отключение сделает недоступным некоторые возможности, например CurrentRow, CurrentCell и, возможно, еще что-то.

    • Переключать выделение на одну из строк, которые должны быть видимыми.
      dataGridView1.CurrentCell = this.dataGridView1[columnNumber, visibleRowNumber];

      Однако, этот вариант не работает в случае, когда все строки должны быть скрыты.
    Ответ написан
    Комментировать
  • Почему неправильно записывается в textBox?

    @SaddledSharp Автор вопроса
    Кодер. Увлекаюсь информационной безопасностью.
    Вот я глупый... :/
    решил так:
    textBox1.Text += "\r\n" + textOnChars[i] + " - " + crypted + "\n";

    Нужно было дописать "\r\n" в начало, т.к при дебаге я заметил что они сортируюются не по \n а еще по символу \r, вообщем так
    Простите за спам, честно не знал, после вопроса пошел дебажить и решил сразу :\ оставлю, мб кому то нужно будет
    Ответ написан
    2 комментария
  • Публикация dot.net проектов?

    sarapinit
    @sarapinit
    Точу водой камень
    Есть официальное решение от MS - AzureDevOps, там какое-то количество ресурсов бесплатное.
    Есть TeamCity от JetBrains.
    Лично у меня есть положительный опыт использования AzureDevOps. Там есть много готовых тасков и интеграция с Azure, что в моём случае полезно. Про TeamCity подробно не знаю.
    Ответ написан
  • Перебор массива на совпадения!?

    С помощью LINQ можно сгруппировать элементы массива по их значению и отобрать те, количество которых больше 1.

    using System;
    using System.Linq;
    
    public class Test
    {
    	public static void Main()
    	{
            int[] ScoreCombo = new int[5] { 1, 2, 1, 1, 1 };
            foreach(var repeat in ScoreCombo.GroupBy(i => i).Where(g => g.Count() > 1))
                Console.WriteLine("Repeat: " + repeat.Key + " (" + repeat.Count() + ")");
    	}
    }
    Ответ написан
    Комментировать
  • Перебор массива на совпадения!?

    Если я правильно понял вопрос, то через словарь это делается вот так:
    using System;
    using System.Collections.Generic;
    
    namespace GetRepetitions
    {
        class Program
        {
            static void Main(string[] args)
            {
                var scoreCombo = new int[] { 1, 2, 1, 1, 1 };
                var repetitions = GetRepetitionsCount(scoreCombo);   
                
                foreach (var kv in repetitions)           
                    Console.WriteLine($"Num: {kv.Key}, Rep. Count: {kv.Value}");            
            }
    
            static Dictionary<int, int> GetRepetitionsCount(int[] arr)
            {
                var repetitions = new Dictionary<int, int>();
                foreach (var num in arr)
                    if (repetitions.ContainsKey(num))
                        repetitions[num]++;
                    else
                        repetitions.Add(num, 0);
                return repetitions;
            }
        }
    }
    Ответ написан
    Комментировать
  • Как вы используете ноутбуки с большим разрешением экрана и маленькой диагональю?

    profesor08
    @profesor08
    У меня не ноутбук, а стационар, большой монитор и большое разрешение, при 100% масштабе все было мелковато. Поэтому поставил 125%, но случилась проблема с размытостью. Чтоб ее решить, надо активировать еще один параметр.
    Для Windows 10, скорее и для более старых версий, есть настройка масштабирования.
    Параметры Windows - Система - Дисплей - Масштаб и разметка
    n8MGoJn.png

    Тут под настройкой масштаба есть незаметный пункт "Дополнительные параметры масштабирования", жми его, там надо активировать галочку, чтоб винда исправляла размытость в приложениях. Перезагрузи просто так.
    o2jOhig.png

    В идеальном мире этого должно быть достаточно, но в реальном многие программы писались/пишутся без учета системного масштабирования (реально 1-2 строчки кода), следовательно будут размытыми. Но это лечится, в свойствах файла программы надо зайти в совместимость, нажать кнопку "Изменить параметры высокого DPI", ткнуть галочку для исправления проблем. Тогда к этой программе не будет применяться системное масштабирование. Случай редкий, актуальный для старых программ.
    Ответ написан
    1 комментарий