نمایش نتایج 1 تا 8 از 8

نام تاپیک: اشکال در مرتب سازی دیتاگرید به صورت داینامیک

  1. #1

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

    سلام دوستان
    من در برنامه ام گرید دارم که به صورت داینامیک از دیتابیس پر می شود.
    <DataGrid x:Name="GrdKalaForTest" FontFamily="B Nazanin" FontSize="15"  GridLinesVisibility="All" HorizontalGridLinesBrush="#FFCACACA" VerticalGridLinesBrush="#FFCACACA"
    VerticalAlignment="Stretch" AlternationCount="1" AlternatingRowBackground="Azure"
    Margin="38,58,38,213"
    />

    کاربر می تواند روی گرید تغییر ایجاد کند و مثلا اندازه ستون ها را کم و زیاد کند یا روی چند ستون مرتب سازی انجام دهد. این تغییرات به صورت یک فایل xml ذخیره می شود و کاربر بعد از این هروقت وارد فرم می شود تغییرات قبلی از فایل xml خوانده شده و روی گرید اعمال می شود.
    grdsort.jpg
    مشکل اینجاست که مرتب سازی درست انجام نمی شود. هدر گرید نشان می دهد که مرتب شده اما دیتای درون آن مرتب نمی شود. ستون Producer نزولی مرتب شده اما دیتای آن تغییری نکرده.
    به نظر شما مشکل از چیست؟
    این کدی است که sort با ان انجام می شود:
    public static void RestoreGridSetting(ref DataGrid grd, string FileName)
    {
    try
    {
    if (!File.Exists("Setting\\" + FileName + ".xml"))
    {
    return;
    }

    XmlDocument xmldoc = new XmlDocument();

    XmlNodeList xmlnodeList;

    FileStream fs = new FileStream("Setting\\" + FileName + ".xml", FileMode.Open, FileAccess.Read);
    xmldoc.Load(fs);
    fs.Close();

    xmlnodeList = xmldoc.GetElementsByTagName("column");

    grd.Items.SortDescriptions.Clear();

    foreach (DataGridColumn Column in grd.Columns)
    {
    XmlNode Column_Node = (from elem in xmlnodeList.Cast<XmlNode>()
    where elem.ChildNodes.Item(0).InnerText.Trim() == Column.Header.ToString()
    select elem).FirstOrDefault();

    if (Column_Node != null)
    {
    Column.Width = int.Parse(Column_Node.ChildNodes.Item(1).InnerText .Trim());
    Column.Header = Column_Node.ChildNodes.Item(2).InnerText.Trim();
    int DisplayIndex = int.Parse(Column_Node.ChildNodes.Item(3).InnerText .Trim());
    Column.DisplayIndex = DisplayIndex;
    bool visible = Convert.ToBoolean(Column_Node.ChildNodes.Item(4).I nnerText.Trim());
    Column.Visibility = visible == true ? Visibility.Visible : Visibility.Hidden;

    if (Column_Node.ChildNodes.Item(5) != null)
    {
    Column.SortDirection = Column_Node.ChildNodes.Item(5).InnerText.Trim() == "Ascending" ? ListSortDirection.Ascending : ListSortDirection.Descending;
    }
    }

    grd.Items.Refresh();
    }


    }
    catch (Exception ex)
    {
    MessageBox.Show("RestoreGridSetting: " + ex.Message);
    }
    }

    ممنون از دوستان

  2. #2

    نقل قول: اشکال در مرتب سازی دیتاگرید به صورت داینامیک

    سلام مجدد
    پروژه به همراه فایل xml را ضمیمه می کنم.
    https://www.mediafire.com/?5xs16zbhm3bq0py

  3. #3
    مدیر بخش آواتار ژیار رحیمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    1,095

    نقل قول: اشکال در مرتب سازی دیتاگرید به صورت داینامیک

    دوست گرامی مرتب سازی یک property پیش فرض در datagrid هست که در wpf و winform بصورت پیش فرض true هست لازم به کد نویسی برای مرتب کردن ستون ها نیست و کار اضافه ایی انجام میدی.دلیل مشکل شمام تداخل دو مرتب سازی هست (مرتب سازی پیش فرض خود دیتاگرید و مرتب سازی که شما براش کد نوشتی)
    First,solve the problem then write the code

  4. #4

    نقل قول: اشکال در مرتب سازی دیتاگرید به صورت داینامیک

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

  5. #5
    مدیر بخش آواتار ژیار رحیمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    1,095

    نقل قول: اشکال در مرتب سازی دیتاگرید به صورت داینامیک

    خاصیت پیش فرض خود دیتاگرید رو false کن .مقاله زیر رو مطالعه نمایید به مراتب کارشما رو آسونتر میکنه اگر از این روش استفاده نمایی
    http://www.bengribaudo.com/blog/2012...ting-and-order
    First,solve the problem then write the code

  6. #6

    نقل قول: اشکال در مرتب سازی دیتاگرید به صورت داینامیک

    پراپرتی SortDirection در datagrid به خودی خود عمل مرتب سازی رو انجام نمیده. این پراپرتی فقط فلش مربوط به مرتب سازی ستون (رو به بالا و یا پایین) را ایجاد میکنه.
    منبع: https://blogs.msdn.microsoft.com/vin...e-wpf-datagrid

    متد RestoreGridSetting جایی که sortdirection رو ست میکنید(خط 37 تا 40) به صورت زیر اصلاح کنید
                            if (Column_Node.ChildNodes.Item(5) != null)
    {
    ListSortDirection sortDirection = (ListSortDirection)Enum.Parse(typeof(ListSortDirec tion), Column_Node.ChildNodes.Item(5).InnerText.Trim() , true);
    Column.SortDirection = sortDirection;
    grd.Items.SortDescriptions.Add(new SortDescription(Column.SortMemberPath, sortDirection));
    }

    به خط 43 هم فکر نمیکنم نیازی باشه.

  7. #7
    مدیر بخش آواتار ژیار رحیمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    1,095

    نقل قول: اشکال در مرتب سازی دیتاگرید به صورت داینامیک

    CanUserSort حالت sorting رو برای ستون مورد نظر فعال و بدرستی عملیات Sortingرو انجام می شود

    <DataGrid >
    <DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding Id}" CanUserSort="False" />
    <DataGridTextColumn Binding="{Binding Name}" CanUserSort="True" />
    </DataGrid.Columns>
    </DataGrid>

    First,solve the problem then write the code

  8. #8

    نقل قول: اشکال در مرتب سازی دیتاگرید به صورت داینامیک

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    پراپرتی SortDirection در datagrid به خودی خود عمل مرتب سازی رو انجام نمیده. این پراپرتی فقط فلش مربوط به مرتب سازی ستون (رو به بالا و یا پایین) را ایجاد میکنه.
    منبع: https://blogs.msdn.microsoft.com/vin...e-wpf-datagrid

    متد RestoreGridSetting جایی که sortdirection رو ست میکنید(خط 37 تا 40) به صورت زیر اصلاح کنید
                            if (Column_Node.ChildNodes.Item(5) != null)
    {
    ListSortDirection sortDirection = (ListSortDirection)Enum.Parse(typeof(ListSortDirec tion), Column_Node.ChildNodes.Item(5).InnerText.Trim() , true);
    Column.SortDirection = sortDirection;
    grd.Items.SortDescriptions.Add(new SortDescription(Column.SortMemberPath, sortDirection));
    }

    به خط 43 هم فکر نمیکنم نیازی باشه.
    بله مشکل حل شد بالاخره. مرسی ممنون از شما و همه دوستان :)

تاپیک های مشابه

  1. پاسخ: 1
    آخرین پست: سه شنبه 29 دی 1394, 07:37 صبح
  2. اشكال در ارسال پارامتر گريد به صورت byVal
    نوشته شده توسط baidin در بخش VB.NET
    پاسخ: 7
    آخرین پست: پنج شنبه 21 مرداد 1389, 10:29 صبح
  3. اشکال در مرتب سازی متن فارسی
    نوشته شده توسط ehsaniran59 در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: سه شنبه 05 اردیبهشت 1385, 10:41 صبح
  4. اشکال در مرتب سازی datagrid
    نوشته شده توسط Yalda2005 در بخش برنامه نویسی در Delphi
    پاسخ: 10
    آخرین پست: دوشنبه 10 بهمن 1384, 21:50 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •