Ответы пользователя по тегу C#
  • Asp.net - Вычисление колонок и вывод результата без перезагрузки страницы UserController GridView?

    @Voucik
    Ну чёт типа этого
    <!DOCTYPE HTML>
    <html>
      <head> </head>
      <body>
    
        <script>
    
    function Start()
    {
     document.all('lb').innerHTML ="hello word"
    }
    
    
        </script>
    <label id= "lb">aaaaaaaa</label>
    <input type="button" onclick="Start()">
      </body>
    </html>
    Ответ написан
    Комментировать
  • Как передать несколько параметров в WCF REST сервис, используя PUT запрос?

    @Voucik
    [WebInvoke(Method = "PUT", BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    [OperationContract]
    bool PutData(User user, string userId);

    Вот полностью рабочий пример (я создал для теста, проверил всё работает)

    Служба:
    Contract
    namespace WcfServiceHost
    {
        [ServiceContract]
        public interface IService1
        {
            [OperationContract()]
            [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
            List<Data.Test> GetTestData();
    
            [OperationContract]
            [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest)]
            void AddTestData(Data.Test value, String additional);
        }
    }


    SVC
    namespace WcfServiceHost
    {
        [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
        public class Service1 : IService1
        {
            private static List<Data.Test> _data = new List<Data.Test>() { new Data.Test() { ID = 0, Name = "a" }, new Data.Test() { ID = 1, Name = "B" } };
            public List<Data.Test> GetTestData()
            {
                return _data;
            }
    
            public void AddTestData(Data.Test value, String additional)
            {
                value.Name = value.Name + additional;
                _data.Add(value);
            }
        }
    }

    Данные
    namespace WcfServiceHost.Data
    {
        [DataContract]
        public class Test
        {
            [DataMember(Name = "id")]
            public int ID { get; set; }
            [DataMember(Name = "name")]
            public string Name { get; set; }
        }
    }


    Global.asax
    namespace WcfServiceHost
    {
        public class Global : System.Web.HttpApplication
        {
    
            protected void Application_Start(object sender, EventArgs e)
            {
    
            }
    
            protected void Session_Start(object sender, EventArgs e)
            {
    
            }
    
            protected void Application_BeginRequest(object sender, EventArgs e)
            {
                
                EnableCrossDomainAjaxCall();
            }
    
            private void EnableCrossDomainAjaxCall()
            {
                HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
    
                if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
                {
                    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
                    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");
                    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
                    HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
                    HttpContext.Current.Response.End();
                }
            }
    
            protected void Application_AuthenticateRequest(object sender, EventArgs e)
            {
    
            }
    
            protected void Application_Error(object sender, EventArgs e)
            {
    
            }
    
            protected void Session_End(object sender, EventArgs e)
            {
    
            }
    
            protected void Application_End(object sender, EventArgs e)
            {
    
            }
    
            
    
    
        }
    }


    Клиетн:
    ViewBag.Title = "title";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <script type="text/javascript">
        //Get Data
        function GETData() {
            $.ajax({
                type: 'GET',
                url: "http://localhost:10468/Service1.svc/GetTestData",
                async: false,
                cache: false,
                dataType: 'json',
                crossDomain: true,
                success: function (data) {
                    ShowData(data);
                },
                error: function (e) {
                    console.log(e.message);
                }
            });
        };
    
        function ShowData(data) {
            RemoveData();
            var str = "<div id='DataSelf'>";
            data.forEach(function (item) {
                str += "<div style=\"float: left; margin-right: 20px;\">" + item.id + "</div><div>" + item.name + "</div>";
            });
            str += "</div>";
            $("#ShowData").append(str);
        }
    
        function RemoveData() {
            $("#DataSelf").remove();
        }
    
        //Send Data
        function SendData() {
            var Json = {'value': { 'id': $("#id").val(), 'name': $("#name").val() },'additional':'ffff'};
            $.ajax({
                url: "http://localhost:10468/Service1.svc/AddTestData",
                data: JSON.stringify(Json),
                type: "POST",
                processData: false,
                async: false,
                contentType: "application/json",
                dataType: "text",
                success:
                        function (response) {
    
                        },
                error: function (er) {
    
                }
            });
        }
    </script>
    <div id='ShowData'></div>
    <input type="button" onclick="GETData()" value="GetTestData"/>
    <br/>
    <input id="id" name="id" type="text" width="100" height="30"/>
    <input id="name" name="name" type="text" width="100" height="30"/>
    <input type="button" onclick="SendData()" value="AddTestData"/>
    Ответ написан
    Комментировать
  • Как решить проблему с печатью из C# под Windows 8?

    @Voucik
    Я конечно, не знаю, важно ли для вас, делать печать программно. Но могу предложить вариант, через Office. Так вам не придётся париться со всякими настройками принтеров, их драйверами и т.д. Вам надо будет просто, сделать шаблон, например в Excel и в него выгрузить ваши данные и нажать кнопочку печати уже в Office. Вот ссылка на мою же статейку, как это сделать
    habrahabr.ru/post/203522 . Возможно пригодиться. И к стати, там выгрузка происходит в универсальный офисный формат xlsx, это означает, что вы можете открыть или распечатать данные не только с помощью MS Office, но и в бесплатных аналогах офиса (если вас напрягает MS OffIce). В Libre, Open Office.
    Ответ написан
    Комментировать
  • Как сделать в DataGrid колонку с текстом и и другой таблицей?

    @Voucik
    Вот пример:
    Создаём табличку с вложенной таблицей DataTemplate.
    <DataGrid
                    Name="GvHeader"                     
                    AutoGenerateColumns="False"                                                 
                    HorizontalScrollBarVisibility="Auto"
                    CanUserDeleteRows="False"  
                    CanUserAddRows="False"            
                    CanUserResizeColumns="True"
                    CanUserReorderColumns="False"
                    CanUserResizeRows="False"
                    AllowDrop="False"
                    RowDetailsVisibilityMode="Collapsed"
                    IsReadOnly="True" ClipboardCopyMode="ExcludeHeader" SelectionMode="Single">
    
                <DataGrid.RowStyle>
                    <Style TargetType="{x:Type DataGridRow}">
                        <EventSetter Event="MouseDown"  Handler="HeaderRowMouseDown"/>
                        <EventSetter Event="Unselected" Handler="HeaderRowUnselected"></EventSetter>
                    </Style>
                </DataGrid.RowStyle>
    
                <DataGrid.RowDetailsTemplate>
                    <DataTemplate>
                        <DataGrid x:Name="GvLines"                     
                                        AutoGenerateColumns="False"                                                 
                                        HorizontalScrollBarVisibility="Auto"
                                        CanUserDeleteRows="False"  
                                        CanUserAddRows="False"            
                                        CanUserResizeColumns="True"
                                        CanUserReorderColumns="False"
                                        CanUserResizeRows="False"
                                        AllowDrop="False"            
                                        IsReadOnly="True" ClipboardCopyMode="ExcludeHeader" SelectionMode="Single" 
                                       ItemsSource="{Binding Path=Lines}">
                            <DataGrid.Columns>
                                <DataGridTextColumn
                                            Header="B1"                                                                                  
                                            Binding="{Binding Path=B,Mode=OneWay}"/>
                                <DataGridTextColumn
                                            Header="B2"                                                                                  
                                            Binding="{Binding Path=BB,Mode=OneWay}"/>
                                <DataGridTextColumn
                                            Header="B3"                                                                                  
                                            Binding="{Binding Path=BBB,Mode=OneWay}"/>
                            </DataGrid.Columns>
                        </DataGrid>
                    </DataTemplate>
                </DataGrid.RowDetailsTemplate>
                <DataGrid.Columns>
    
                    <DataGridTextColumn
                                            Header="A1"                                                                                  
                                            Binding="{Binding Path=A,Mode=OneWay}"/>
                    <DataGridTextColumn
                                            Header="A2"                                                                                  
                                            Binding="{Binding Path=AA,Mode=OneWay}"/>
                    <DataGridTextColumn
                                            Header="A3"                                                                                  
                                            Binding="{Binding Path=AAA,Mode=OneWay}"/>
                </DataGrid.Columns>
            </DataGrid>


    Теперь создадим два класса для теста
    public class Header
        {
            public String A { get; private set; }
            public String AA { get; private set; }
            public String AAA { get; private set; }
    
            public List<Line> Lines { get; private set; } 
    
            public Header(string a, string aa, string aaa,ICollection<Line> lines)
            {
                A = a;
                AA = aa;
                AAA = aaa;
    
                Lines = new List<Line>();
                if (lines != null && lines.Count > 0)
                {
                    Lines.AddRange(lines);
                }
            }
        }

    И
    public class Line
        {
            public String B { get; private set; }
            public String BB { get; private set; }
            public String BBB { get; private set; }
    
            public Line(string b, string bb, string bbb)
            {
                B = b;
                BB = bb;
                BBB = bbb;
            }
        }

    Теперь перейдём в код формы и напишем следующий код.
    public partial class MainWindow : Window
        {
            public List<Header> header;
            public MainWindow()
            {
                InitializeComponent();
    
                //заполняем тестовыми данными
                header = new List<Header>
                {
                    new Header("a1", "a2", "a3", new List<Line>
                    {
                        new Line("a", "b", "c"),
                        new Line("d", "1", "2")
                    }),
                    new Header("a11", "a22", "a33", new List<Line>
                    {
                        new Line("b1", "b2", "b3"),
                        new Line("b11", "b2222", "b333"),
                        new Line("b1111", "b22", "b3"),
                        new Line("dsxfds", "sdfsdf", "sfsdf")
                    }),
                    new Header("a1", "a2", "a3", new List<Line>
                    {
                        new Line("bb1", "b1", "ab"),
                        new Line("bb2", "b2", "bb"),
                        new Line("bb3", "b3", "cb")
                    }),
                };
    
                GvHeader.ItemsSource = header;//связываем главную табличку с нашими данными
            }
    
            //собитие, которое происходит при RowUnselected (тоесть когда выделение строки пропадает)-прячет подтаблицу
            private void HeaderRowUnselected(object sender, RoutedEventArgs e)
            {
                if (sender == null)
                {
                    return;
                }
                var row = (DataGridRow)sender;
                row.DetailsVisibility = Visibility.Collapsed;
            }
            //собитие, которое происходит при MouseDown-показывает подтаблицу
            private void HeaderRowMouseDown(object sender, MouseButtonEventArgs e)
            {
                if (sender == null)
                {
                    return;
                }
                var row = (DataGridRow)sender;
                row.DetailsVisibility = row.DetailsVisibility == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
            }
        }

    22d55d41265b462701ddc786e3427b18.png

    Ещё можно посмотреть код тут.
    http://social.msdn.microsoft.com/Forums/ru-RU/f41b870b-cc74-45fe-872c-15dec9acf55a/c-wpf-rowdetailstemplate?forum=fordesktopru
    Ответ написан
    Комментировать
  • Как изучить c# с основ до зарабатывания денег?

    @Voucik
    Как по мне, то лучше всего сделать, как сказал ScorpLeX. Ибо сам так начинал, у меня было и высшее и програмить я мог (я так думал). Мне тоже советовали, посмотреть проекты на фрилансах, потренироваться. Но когда ты их выполняешь, то тебе кажется, что всё правильно, ты ведь сам оцениваешь их, а не крутой дядька программер. Начал искать работу, все хотят с опытом, не менее года, искал 2 месяца (ходил, звонил). Уже был готов бесплатно, работать, чтоб опыт хоть какой-то был (по форумам полазил, тоже так советовали). Ну и вдруг попал я джуниором в одну фирмочьку, где я понял, что ничего не знаю и большие дядьки мне обьяснили, что это не то, а это так. То есть дали направление, поделись опытом и т.д. Так что я считаю, что только работая, ты станешь программистом. И ты должен любить это дело, иначе ты не будешь программистом. И за деньгами не гонись, первое время будешь очень мало зарабатывать (т.к. джуниоры в Москве зарабатывают от 20 до 30) и если ты не любишь программирование (соответственно и не будешь развиваться), то ты и не станешь больше зарабатывать.
    А что учить?
    Если ты выбрал C#, то сейчас в моде MVC (всё же мир движется к вебу), WPF.
    Обязательно должен знать базы данных MS SQL и не просто знать, а хотяб уметь писать простенькие процедурки, запросики (т.е. не просто select, update, insert – этого мало).
    Паттерны изучай обязательно (без них ты не программист, а простой школьник)!!!
    Да в принципе тебя на работе направят, главное не упирайся и слушай дядей. Ты можешь чего-то не понимать и думать что это бред и не правильно. Но как вырастишь, поймёшь ))))
    Удачи.
    Ответ написан
    Комментировать
  • Не прорисовывается WPF control на WinForm-е

    @Voucik
    Вроде как WPF проблемно работает, на некоторых процессорах (по моему на атомах).
    Ответ написан
    Комментировать
  • Как правильно сделать привязку данных в wpf?

    @Voucik
    вот пример.
    WPF форма, где у нас два контрола: ComboBox - cmb и TextBox - tb
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation">http://schemas.microsoft.com/winfx/2006/xaml/presentation</a>"
            xmlns:x="<a href="http://schemas.microsoft.com/winfx/2006/xaml">http://schemas.microsoft.com/winfx/2006/xaml</a>"
            xmlns:wpfApplication1="clr-namespace:WpfApplication1"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <ResourceDictionary>
                <wpfApplication1:ConverterNull x:Key="ConverterNull"/>
            </ResourceDictionary>
        </Window.Resources>
        <Grid>
            
            <Grid.RowDefinitions>
                <RowDefinition Height="30"></RowDefinition>
                <RowDefinition Height="5"></RowDefinition>
                <RowDefinition Height="30"></RowDefinition>
            </Grid.RowDefinitions>
    
            <ComboBox Name ="cmb" DisplayMemberPath="Value" SelectedValuePath = "id" ></ComboBox>
    
            <TextBox Name="tb" Grid.Row="2"  Text="{Binding ElementName=cmb, Path=SelectedItem.Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource ConverterNull}}"></TextBox>
        </Grid>
    </Window>

    DisplayMemberPath="Value" - то что будет отображаться (значение)
    SelectedValuePath = "id" - ключ

    Text="{Binding ElementName=cmb,
    Path=SelectedItem.Value - поле нашего объекта, значение которого будет присваиваться нашему tb
    ,Mode=TwoWay, - означает, привязка на read и write (при этом у поля, нашего объекта, должен быть открыт set )
    UpdateSourceTrigger=PropertyChanged - ну и фичя которая отвечает, за update данных
    ,Converter={StaticResource ConverterNull - а тут добавляем ещё конвертер, дабы у нас обрабатывались пустые значения.
    }}"

    Для этого надо добавить конвертер в ресурсы (как тут)
    <Window.Resources>
            <ResourceDictionary>
                <wpfApplication1:ConverterNull x:Key="ConverterNull"/>
            </ResourceDictionary>
        </Window.Resources>


    ну и путь указать к самому классу конвертера
    xmlns:wpfApplication1="clr-namespace:WpfApplication1"

    А теперь сам код.
    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Windows;
    using System.Windows.Data;
    
    namespace WpfApplication1
    {
        public partial class MainWindow : Window
        {
            private List<Info> info;
            public MainWindow()
            {
                InitializeComponent();
                info = new List<Info>
                {
                    new Info("a"),
                    new Info("b"),
                    new Info("c")
                };
    
                cmb.ItemsSource = info;
            }
        }
    
        public class Info
        {
            public Guid id { get; private set; }
            public string Value { get; set; }
    
            public Info(String val)
            {
                id = Guid.NewGuid();
                Value = val;
            }
        }
    
        sealed class ConverterNull : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                return value;
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                return value == null ? null : String.IsNullOrWhiteSpace(value.ToString()) ? null : value;
            }
        }
    }


    public class Info - наши данные
    sealed class ConverterNull : IValueConverter - конвертер
    присваиваем наши данные комбоБоксу cmb.ItemsSource = info;
    и всё.
    Ответ написан
    Комментировать