مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

farzadini

عضویت از 1395/11/01

بسته شدن یک فرم و انتقال اطلاعات از این فرم به فرم دیگر

  • دوشنبه 2 بهمن 1396
  • 00:20
تشکر میکنم

اساتید عزیز امیدوارم بتونم مشکلم رو خوب توضیح بدم که مزاحم وقت شما نباشم.


این یک فرم wpf هست که غیر از دکمه اوکی و کنسل سه باتن (...) داره مربوط به اسم، شهر و مدرسه (فرم اولیه)

هر کدوم از این دکمه ها یک پنجره جدید رو باز می کنند که داری یک دیتاگرید هست و کاربر میتونه یکی از ردیف ها رو انتخاب کنه مثلا دکمه شهر  city  وقتی باز میشه از بین شهر ها می شه یک ردیف رو انتخاب کرد و مثلا با رویداد دابل کلیک اون شهر انتخاب شده به تکست باکس مربوطه منتقل میشه


نمونه فرم دیتاگرید مربوط به هر تکست باکس(فرم دوم)

در نهایت وقتی این سه تا تکست باکس در فرم wpf  اول پر شدند کار با این قسمت تموم میشه.

یک چیزی شبیه این

مشکل من اینجاست که در رویداد دابل کلیک مربوطه چه چیزی باید بنویسم که فرم دیتا گرید بسته بشه و ردیف انتخاب شده به تکست باکس فرم اول منتقل بشه.

این توضیح رو هم بدم که دیتابیسم اس کیو ال هست و با استفاده از EntityFrameWork اتصال دیتاگرید ویو رو به جدول اس کیو ال برقرار شده

پاسخ های این پرسش

تعداد پاسخ ها : 6 پاسخ
کاربر سایت

haditg

عضویت از 1396/10/01

  • دوشنبه 2 بهمن 1396
  • 16:22

با سلام کد انتقال عبارت از گرید به تکس باکس رو بگذارید ما هم استفاده کنیم.

کاربر سایت

farzadini

عضویت از 1395/11/01

  • دوشنبه 2 بهمن 1396
  • 21:42

<DataGrid x:Name="UserGrid" ItemsSource="{Binding Users}">
...
</DataGrid>

<TextBox Text="{Binding ElementName=UserGrid, Path=SelectedItem.Name}"/>
...More of the same...

از این پاسخ  ها در Stack OverFlow پیدا میشه ولی مشکل من اینه که در این پاسخ هردوی تکست باکس ها و دیتا گرید در یک فرم هستند ولی در سوال بنده تکست باکس ها در فرم اول هستند و دیتاگرید ها در فرم دیگری که با کلیک روی باتن مربوطه باز میشن

کاربر سایت

salman_b

عضویت از 1396/02/18

  • سه شنبه 3 بهمن 1396
  • 12:25

با سلام

دوست من چیزی که به ذهن من میرسه واسه اینکار اینه که اطلاعات datagrid یا textbox ها رو درون یه لیست یا یه سری فیلد استاتیک از یه کلاس public بریزی و تو فرم دیگه هم اون فیلد ها رو داشته باشی و حالا یا binding انجام بدی یا نظیر به نظیر datagrid یا textbox ها رو پر کنی

کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • چهارشنبه 4 بهمن 1396
  • 00:03

باسلام

در این مثال با استفاده از EventHandler زیر مقادیر را از صفحه دوم به صفحه اول باز می گردانیم :

public event EventHandler PersonSelected;

کد XAML صفحه  :

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="40"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="90"/>
            <ColumnDefinition Width="80*"/>
            <ColumnDefinition Width="350"/>
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Column="0" Grid.Row="0"  Margin="10">Name :</TextBlock>
        <Button Name="btnName" Grid.Column="1" Grid.Row="0" Margin="10" Click="btnName_Click">...</Button>
        <TextBox Name="txtName" Grid.Column="2" Grid.Row="0"  Margin="10" IsReadOnly="True"></TextBox>
        
        <TextBlock Name="lblMessage" Grid.Column="2" Grid.Row="1" TextAlignment="Center" VerticalAlignment="Center" Background="Bisque" Padding="10" Margin="10">Sajad Bagherzadeh</TextBlock>
    </Grid>

کد cs صفحه اصلی :

public event EventHandler PersonSelected;

        protected virtual void OnPersonSelected()
        {
            EventHandler handler = PersonSelected;
            if (handler != null) handler(this, EventArgs.Empty);
        }

        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnName_Click(object sender, RoutedEventArgs e)
        {
            winNames win = new winNames(this);
            win.Owner = this;
            OnPersonSelected();
            win.ShowDialog();
            

        }

کد XAML صفحه دوم :

<StackPanel>
        <DataGrid Name="grdNameList" AutoGenerateColumns="False" IsReadOnly="True" MouseDoubleClick="GrdNameList_OnMouseDoubleClick">
            <DataGrid.Columns>
                <DataGridTextColumn Header="نام ونام خانوادگی" Width="*" Binding="{Binding FullName}"></DataGridTextColumn>
                <DataGridTextColumn Header="سن" Width=".35*" Binding="{Binding Age}"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </StackPanel>

کد cs صفحه دوم :

        private MainWindow _mainWindow = new MainWindow();
        public winNames()
        {
            InitializeComponent();
            BindGridList();
        }
        public winNames(MainWindow window)
        {
            InitializeComponent();
            BindGridList();
            window.PersonSelected += window_PersonSelected;
        }

        void window_PersonSelected(object sender, System.EventArgs e)
        {
            var mainWindow = sender as MainWindow;
            if (mainWindow != null)
                _mainWindow = mainWindow;
            
        }

        private void GrdNameList_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (_mainWindow != null)
            {
                var p = grdNameList.SelectedValue as Person;
                var message = "نام : " + p.FullName + " , سن : " + p.Age;
                _mainWindow.txtName.Text = message;
                _mainWindow.lblMessage.Text = message;
                this.Close();
            }
        }

فایل های ضمیمه

کاربر سایت

farzadini

عضویت از 1395/11/01

  • دوشنبه 9 بهمن 1396
  • 00:31

تشکر می کنم از توجه اساتید گرامی. البته من یک کار دیگه کردم نمیدونم چقدر مرسوم باشه یا پذیرفتنی. اون هم اینکه دیتا گرید صفحه دوم رو به صفحه اول منتقل کردم. البته بصورت پنهان. درنتیجه هروقت دکمه مربوطه صفحه اول رو اجرا می کنم دیتا گرید بصورت آشکار در میاد و پس از دابل کلیک کردن مقدارش خونده میشه و در تکست باکس ریخته میشه. و دوباره پنهان میشه. بنظرم خیلی راحت در اومد. البته چون لیست گریدها کم بود شاید مناسب باشه ولی نمیدونم توی دیتا حجم بالا هم مناسب باشه یا نه

کاربر سایت

M.M

عضویت از 1398/08/03

  • دوشنبه 19 آبان 1399
  • 20:05

سلام و خسته نباشید خدمت اساتید و دوستان عزیز.استاد باقرزاده امکانش هست که همین مطلب رو برای زبان C# هم قرار بدین ؟

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)