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

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

کاربر سایت

rezasaveys

عضویت از 1396/08/24

مشکلات کار با DataGrid در WPF

  • شنبه 18 آذر 1396
  • 21:53
تشکر میکنم

با سلام خدمت اساتید

من با DataGridView در سی شارپ ویندوز فرم کار کردم . زمانیکه یک فیلد ایجاد میکردیم و خاصیت Visibility رو برابر False میکردیم ، آن فیلد(ستون) در جدول نمایش داده نمی شد ، اما مقدار دهی می شد و ما قادر بودیم از مقادیر داخلش استفاده کنیم . مثلا فیلد UserID در یک جدول ، ما نیازی به نمایش نداریم ، اما برای یکسری کارها به مقادیرش نیاز داریم . خاصیت Visibility  رو برابر False میکنیم و از آن استفاده میکنیم .

حال در DataGrid هم همین مشکل هست . در یک جدول بزرگ که دارای کلیدهای خارجی متعددی است و ما نیاز به استفاده از تمامی انها داریم و در صورت نمایش در جدول ، ظاهر آن زیبا نخواهد بود . راههای مختلفی را تست کردم تا در جدول نمایش داده نشود ، اما مقداردهی گردد و ما قادر به استفاده از مقادیر آن باشیم .

راهی پیدا نکردم و جوابی نیافتم . لطفا مرا راهنمایی کنید ...

سپاس فراوان

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

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

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

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

  • یکشنبه 19 آذر 1396
  • 13:22

شما می توانید ستون های جدولتان را به صورت دستی تعریف کنید و آنها را به دیتاسورس متصل کنید (Bind) سپس صفت Visibility مواردی را که نمی خواهید نمایش داده شود برابر Collapsed قرار دهید و برای بدست آورد اطلاعات هر ردیف در صورت انتخاب شدن آن می توانید از کد زیر استفاده کنید :

DataRowView row = (DataRowView)dg.SelectedItems[0];

سپس نام ستون مورد نظراتان را به ایندکس متغییر row دهید و مقدار آن را بدست آوردید :

row["ColumnName"];

کاربر سایت

rezasaveys

عضویت از 1396/08/24

  • یکشنبه 19 آذر 1396
  • 13:29

سلام ممنون از راهنماییتون

در صورت امکان یک نمونه برنامه کوچیک برام تعریف میکنید ببینم چطوره ؟؟؟؟؟

ممنون میشم

کاربر سایت

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

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

  • یکشنبه 19 آذر 1396
  • 13:58

یک نمونه پروژه براتون آماده کردم که ضمیمه شده است.

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

کاربر سایت

rezasaveys

عضویت از 1396/08/24

  • یکشنبه 19 آذر 1396
  • 15:30

من یک جدول دارم که دارای فیلدهایی است . یکی که کلید اصلی می باشد ID یا UserID ویک فیلد دیگر که به فرض برای نمایش وضعیت می باشد .فیلد وضعیت رو هم در View ویرایش کردم و با یک شرط با دریافت مقادیر 0 و 1 نوع وضعیت رو تعیین میکنم (فعال و غیر فعال) (یک فیلد Status با مقادیر  یا 0 یا 1 ، یک فیلد FarsiStatus با مقدار فعال یا غیر فعال) . من در DataGrid خودم به هر دو مقدار نیاز دارم . اما دوست ندارم کاربر فیلد UserID و Status رو ببینه .

مقادیر هم بصورت دستی وارد سیستم نمی شه . کاملا داینامیکه . UserID هم بصورت اتوماتیک به هر فیلدی که به جدول اضافه میشه اختصاص پیدا میکنه .

تصویری از محیط برنامه

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

ممنون

کاربر سایت

rezasaveys

عضویت از 1396/08/24

  • دوشنبه 20 آذر 1396
  • 19:17

کسی می تونه منو راهنمایی کنه ؟؟؟

کاربر سایت

rezasaveys

عضویت از 1396/08/24

  • دوشنبه 20 آذر 1396
  • 19:47

 یک مشکل دیگه هم توی wpf و datagrid دارم و اونهم  savefiledialog می باشد . میخوام توی برنامه ام وقتی برای یکی نامه میفرستم ، اگه فایلی هم پیوست نیاز داشت براش پیوست کنم  ، تا اینجا کار مشکلی ندارم . فایل رو فراخوانی کردم و توی دیتابیس دخیره کردم و توی جدول datagrid هم اسم فایل رو نمایش دادم . اما مشکل من اینجاست که میخوام خاصیت attachmen رو برای سلول "پیوست" در همه ی ردیف های جدول فعال کنم . وقتی کاربر روی نام فایل کلیک کرد ، پنجره savefiledialog باز شه و کاربر بتونه فایل رو در هرجایی که خواست دانلود کنه . توی C# اینکار رو کردم اما توی wpf مشکل دارم .

همون کد فایل رو آوردم توی wpf  پیاده کردم  :

private void DataGrid_UserLog_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            System.Windows.Forms.SaveFileDialog SVD = new SaveFileDialog();
            if (DataGrid_UserLog.CurrentCell.Equals(5) && e.RowIndex != -1)
            {
                if (DataGrid_UserLog.CurrentCell != null && DataGrid_UserLog.CurrentCell.Item != null)
                {
                    object Item = DataGrid_UserLog.SelectedItem;
                    int Get_NewsID = Convert.ToInt32((DataGrid_UserLog.SelectedCells[0].Column.GetCellContent(Item) as TextBlock).Text);
                    var query_FileName = (from FN in database.News where FN.NewsID == Get_NewsID select FN).ToList();
                    SaveAttachment(SVD, DataGrid_UserLog, Get_NewsID);  //// فراخوانی متد دانلود پیوست از دیتابیس
                }
            }
        }

اما RowIndex رو خطا میده

لطفا راهنماییم کنید

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

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

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

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