@יהודי-טוב כתב בהפקת דוחו"ת מWPF מה מומלץ?:
למה לא עם rdlc?
אתה מכיר לינק טוב להסבר על תחילת העבודה עם RDLC? (עדיף בעברית, לא חובה)
@יהודי-טוב כתב בהפקת דוחו"ת מWPF מה מומלץ?:
למה לא עם rdlc?
אתה מכיר לינק טוב להסבר על תחילת העבודה עם RDLC? (עדיף בעברית, לא חובה)
אני צריך לייצא (להדפיס/pdf) דוחו"ת של נתונים בעיקר טבלאיים מהתוכנה, מהי הדרך הנכונה לעשות את זה?
האם עיצוב של חלון בxaml והדפסה שלו כדו"ח זה טוב או רע?
אני חשבתי על עיצוב הדוחו"ת ב Page.xaml וליצור Window שאליו אני אטען בכל פעם את הPage הרלוונטי, ועל הWindow אני אעשה את הקוד לשמירה והדפסה וכדו'
.
נ.ב. בדרך הזו אני לכאורה מרוויח שאני יכול ליצור דוחו"ת להדפסה החוצה, אבל שכל עוד הם בתוכנה הם דינאמיים ואינטראקטיביים, מגיבים ללחיצות וכו', כי חלק מהדוחו"ת אמורים להיות מוזנים אח"כ חזרה לתוכנה עם תיקונים ותוספות, ואני חשבתי ליצור לכל דו"ח מזהה ייחודי שיהיה מורכב מסדרת מספרים בפורמט מסויים, שהתוכנה תזהה באיזה סוג דו"ח מדובר ומהם הפרמטרים ששימשו להפקתו, ותוכל להציג אותו מחדש לעדכון מהיר ונח, אף שלא נשמר עותק אמיתי בתוכנה.
@Mordechay אולי זה https://kivy.org/
עדכון.
לאחר שפניתי לתמיכה של syncfusion והוברר שאין כל בעיה בקוד וכו', הם זרקו לי משפט שאולי עשיתי התאמות אישיות כלשהם, ולאחר בדיקה התברר שהשורה הזו בapp.xaml היא זו שדפקה את העסק:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Views/Styles/Scrollbar.xaml" />
</ResourceDictionary.MergedDictionaries>
זה קוד שמצאתי ברשת לעיצוב פס הגלילה, רציתי להצר אותו כי הוא תפס לי מקום באחד הטפסים..
אני לא כ"כ מבין בxaml כך שאיני יודע להצביע על הבעיה עצמה
Scrollbar.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="StandardBorderBrush"
Color="#888" />
<SolidColorBrush x:Key="StandardBackgroundBrush"
Color="Black" />
<SolidColorBrush x:Key="HoverBorderBrush"
Color="#DDD" />
<SolidColorBrush x:Key="SelectedBackgroundBrush"
Color="Gray" />
<SolidColorBrush x:Key="SelectedForegroundBrush"
Color="White" />
<SolidColorBrush x:Key="DisabledForegroundBrush"
Color="#888" />
<SolidColorBrush x:Key="GlyphBrush"
Color="#444" />
<SolidColorBrush x:Key="NormalBrush"
Color="#888" />
<SolidColorBrush x:Key="NormalBorderBrush"
Color="#888" />
<SolidColorBrush x:Key="HorizontalNormalBrush"
Color="#FF070AC8" />
<SolidColorBrush x:Key="HorizontalNormalBorderBrush"
Color="#888" />
<Style x:Key="ScrollBarLineButton"
TargetType="{x:Type RepeatButton}">
<Setter Property="Visibility"
Value="Hidden" />
<Setter Property="SnapsToDevicePixels"
Value="True" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="Focusable"
Value="false" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type RepeatButton}">
<Border Name="Border"
Margin="1"
CornerRadius="2"
Background="{StaticResource NormalBrush}"
BorderBrush="{StaticResource NormalBorderBrush}"
BorderThickness="1">
<Path HorizontalAlignment="Center"
VerticalAlignment="Center"
Fill="{StaticResource GlyphBrush}"
Data="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed"
Value="true">
<Setter TargetName="Border"
Property="Background"
Value="{StaticResource PressedBrush}" />
</Trigger>
<Trigger Property="IsEnabled"
Value="false">
<Setter Property="Foreground"
Value="{StaticResource DisabledForegroundBrush}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ScrollBarPageButton"
TargetType="{x:Type RepeatButton}">
<Setter Property="Visibility"
Value="Hidden" />
<Setter Property="SnapsToDevicePixels"
Value="True" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="IsTabStop"
Value="false" />
<Setter Property="Focusable"
Value="false" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type RepeatButton}">
<Border Background="Black" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ScrollBarThumb"
TargetType="{x:Type Thumb}">
<Setter Property="SnapsToDevicePixels"
Value="True" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="IsTabStop"
Value="false" />
<Setter Property="Focusable"
Value="false" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Border CornerRadius="4"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="0"
Width="8"
Margin="8,0,-2,0" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ScrollBarThumbHor"
TargetType="{x:Type Thumb}">
<Setter Property="SnapsToDevicePixels"
Value="True" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="IsTabStop"
Value="false" />
<Setter Property="Focusable"
Value="false" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Border CornerRadius="4"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="0"
Height="8"
Margin="0,0,-2,0" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ControlTemplate x:Key="VerticalScrollBar"
TargetType="{x:Type ScrollBar}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition MaxHeight="0" />
<RowDefinition Height="0.00001*" />
<RowDefinition MaxHeight="0" />
</Grid.RowDefinitions>
<Border Grid.RowSpan="3"
CornerRadius="2"
Background="Transparent" />
<RepeatButton Grid.Row="0"
Style="{StaticResource ScrollBarLineButton}"
Height="18"
Command="ScrollBar.LineUpCommand"
Content="M 0 4 L 8 4 L 4 0 Z" />
<Track Name="PART_Track"
Grid.Row="1"
IsDirectionReversed="true">
<Track.DecreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}"
Command="ScrollBar.PageUpCommand" />
</Track.DecreaseRepeatButton>
<Track.Thumb>
<Thumb Style="{StaticResource ScrollBarThumb}"
Margin="1,0,1,0"
Background="{StaticResource HorizontalNormalBrush}"
BorderBrush="{StaticResource HorizontalNormalBorderBrush}" />
</Track.Thumb>
<Track.IncreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}"
Command="ScrollBar.PageDownCommand" />
</Track.IncreaseRepeatButton>
</Track>
<RepeatButton Grid.Row="3"
Style="{StaticResource ScrollBarLineButton}"
Height="18"
Command="ScrollBar.LineDownCommand"
Content="M 0 0 L 4 4 L 8 0 Z" />
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="HorizontalScrollBar"
TargetType="{x:Type ScrollBar}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0" />
<ColumnDefinition Width="0.00001*" />
<ColumnDefinition Width="0" />
</Grid.ColumnDefinitions>
<Border Grid.ColumnSpan="3"
CornerRadius="3"
Background="Transparent" />
<RepeatButton Grid.Column="0"
Style="{StaticResource ScrollBarLineButton}"
Width="18"
Command="ScrollBar.LineLeftCommand"
Content="M 4 0 L 4 8 L 0 4 Z" />
<Track Name="PART_Track"
Grid.Column="1"
IsDirectionReversed="False">
<Track.DecreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}"
Command="ScrollBar.PageLeftCommand" />
</Track.DecreaseRepeatButton>
<Track.Thumb>
<Thumb Style="{StaticResource ScrollBarThumbHor}"
Margin="0,1,0,1"
Background="{StaticResource HorizontalNormalBrush}"
BorderBrush="{StaticResource HorizontalNormalBorderBrush}" />
</Track.Thumb>
<Track.IncreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}"
Command="ScrollBar.PageRightCommand" />
</Track.IncreaseRepeatButton>
</Track>
<RepeatButton Grid.Column="3"
Style="{StaticResource ScrollBarLineButton}"
Width="18"
Command="ScrollBar.LineRightCommand"
Content="M 0 0 L 4 4 L 0 8 Z" />
</Grid>
</ControlTemplate>
<Style x:Key="{x:Type ScrollBar}"
TargetType="{x:Type ScrollBar}">
<Setter Property="SnapsToDevicePixels"
Value="True" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Style.Triggers>
<Trigger Property="Orientation"
Value="Horizontal">
<Setter Property="Width"
Value="Auto" />
<Setter Property="Height"
Value="12" />
<Setter Property="Template"
Value="{StaticResource HorizontalScrollBar}" />
</Trigger>
<Trigger Property="Orientation"
Value="Vertical">
<Setter Property="Width"
Value="18" />
<Setter Property="Height"
Value="Auto" />
<Setter Property="Template"
Value="{StaticResource VerticalScrollBar}" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="FavsScrollViewer"
TargetType="{x:Type ScrollViewer}">
<Setter Property="OverridesDefaultStyle"
Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ScrollContentPresenter Grid.Column="1" />
<ScrollBar Name="PART_VerticalScrollBar"
Value="{TemplateBinding VerticalOffset}"
Maximum="{TemplateBinding ScrollableHeight}"
ViewportSize="{TemplateBinding ViewportHeight}"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />
<ScrollBar Name="PART_HorizontalScrollBar"
Orientation="Horizontal"
Grid.Row="1"
Grid.Column="1"
Value="{TemplateBinding HorizontalOffset}"
Maximum="{TemplateBinding ScrollableWidth}"
ViewportSize="{TemplateBinding ViewportWidth}"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type ScrollViewer}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ScrollContentPresenter Grid.Column="0" />
<ScrollBar x:Name="PART_VerticalScrollBar"
Grid.Row="0"
Grid.Column="1"
Value="{TemplateBinding VerticalOffset}"
Maximum="{TemplateBinding ScrollableHeight}"
ViewportSize="{TemplateBinding ViewportHeight}"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />
<ScrollBar x:Name="PART_HorizontalScrollBar"
Orientation="Horizontal"
Grid.Row="1"
Grid.Column="0"
Value="{TemplateBinding HorizontalOffset}"
Maximum="{TemplateBinding ScrollableWidth}"
ViewportSize="{TemplateBinding ViewportWidth}"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
@Mordechay יש לך את האתר הזה ל לtkinter
https://visualtk.com/
ובלינק הזה שהבאתי למעלה, יש תוכנה לעיצוב עובר qt
https://build-system.fman.io/qt-designer-download
האמת שיש גם את זה, מעצב עם figma (לא ניסיתי)
https://github.com/ParthJadhav/Tkinter-Designer
@צדיק-תמים זה לא עוזר, הם מדברים על חלוקה לעמודים, אני רוצה גלילה אינסופית, לא אכפת לי שיטען שורה שורה...
@dovid כתב בקבלת רשימת ערכים יחודיים בעמודה באקסל:
תבדוק אם עובד לך פונקציה בשם UNIQUE.
זה עובד מ2019 וב365
יש לי נתונים עם כ20 עמודות, ושעשויים להכיל אף 20,000 שורות. כרגע בטסטים יש לי כ1000 רשומות בלבד, ולוקח לפקד להיטען כ15 שניות.. אני מבין שזה לא צריך להיות ככה..
לאחר עיון כאן
https://help.syncfusion.com/wpf/datagrid/data-virtualization
וכאן
https://support.syncfusion.com/kb/article/6938/how-to-improve-performance-when-loading-grid-with-records-and-columns-in-wpf-datagrid
הוספתי את "EnableDataVirtualization="True
אבל "UseDrawing="Default
לא מתאים (וגם לא ראיתי שעזר..) כי הוא מרנדר את העברית משמאל לימין כמו כתב מראה.. ועדיין לא נושעתי..
אותו קוד טוען את אותם הנתונים לפקד DataGrid רגיל בחלקיק שניה..
מצורף הxaml (הורדתי חלק מהעמודות טקסט או צ'ק בוקס, כשהשארתי 2 עמודות בלבד, זה נטען לאחר 3 שניות.. עדיין הרבה ל2 עמודות בלבד..)
<syncfusion:SfDataGrid x:Name="dataGrid2" Margin="43,153,43,130" AutoGenerateColumns="False"
AllowFiltering="True" AllowEditing="True" FontSize="14"
AllowResizingColumns="True" EnableDataVirtualization="True" AllowDraggingColumns="True"
MouseDoubleClick="DataGrid2_MouseDoubleClick" HeaderStyle="{StaticResource headerStyle}"
AlternatingRowStyle="{StaticResource alternatingRowStyle}" AlternationCount="2"
RowStyle="{StaticResource RowStyle}">
<syncfusion:SfDataGrid.Columns>
<syncfusion:GridCheckBoxColumn HeaderText="בחר" MappingName="selectTemp" Width="50"
IsReadOnly="False" AllowEditing="True" />
<syncfusion:GridTextColumn HeaderText="איידי" MappingName="id" Width="60"
IsReadOnly="True" AllowEditing="False" />
<syncfusion:GridCheckBoxColumn HeaderText="פעיל" MappingName="active" Width="40"
IsReadOnly="True" AllowEditing="False" />
<syncfusion:GridTextColumn HeaderText="שם" MappingName="name" Width="90"
IsReadOnly="True" AllowEditing="False" />
<syncfusion:GridTemplateColumn HeaderText="רייטינג" MappingName="rating" Width="150">
<syncfusion:GridTemplateColumn.CellTemplate>
<DataTemplate>
<local:StarRatingControl x:Name="starRatingControl" Rating="{Binding rating}"
IsHitTestVisible="False" />
</DataTemplate>
</syncfusion:GridTemplateColumn.CellTemplate>
</syncfusion:GridTemplateColumn>
</syncfusion:SfDataGrid.Columns>
</syncfusion:SfDataGrid>
זה הקוד שאיתו אני טוען את הנתונים לפקד בפתיחת הטופס
private SQLiteDataAdapter adapter;
private DataTable dataTable;
private DataView dataView;
public async void LoadData()
{
UpdateStatusBar("טוען נתונים..");
try
{
await Task.Run(() =>
{
using (SQLiteConnection connection = new SQLiteConnection(Globals.connectionString))
{
connection.Open();
string selectSql = "SELECT selectTemp, id, name, active, rating FROM tPeople";
using (SQLiteCommand cmd = new SQLiteCommand(selectSql, connection))
{
adapter = new SQLiteDataAdapter(cmd);
SQLiteCommandBuilder commandBuilder = new SQLiteCommandBuilder(adapter);
dataTable = new DataTable();
adapter.Fill(dataTable);
dataView = new DataView(dataTable);
}
connection.Close();
}
Dispatcher.Invoke(() =>
{
dataGrid2.ItemsSource = dataView;
UpdateStatusBar("מוכן");
});
});
}
catch (Exception ex)
{
// exceptions
}
}
@Y-Excel-Access כתב בגוגל שיטס - איך להעתיק היפר קישור בין חוברות עבודה:
יורשה לי לחלוק בנחרצות, GETVALUES עובד לי מצוין למרות שהגליון סגור כשהטריגר פועל, כלומר הפעולה גורמת לנוסחה בתא לחשב ולתת לAPP SCRIPT את התוצאות של הנוסחה.
נכון, כי כשאתה ניגש לנתונים אז גוגל מבצעת חישוב ומגישה לך את תוצאת החישוב..
מה שכתבתי
לצורך העניין אם תיגש לנתונים כשהגיליון סגור
כוונתי היתה שאם תיגש לקובץ (לא ממש אפשרי בגוגל שיטס אבל תוכל לנסות באקסל) שלא דרך הגוגל שיטס או הAPI אלא תפתח אותו בnotepad תראה שהתא מכיל את הנוסחה ולא את הערך..
@Y-Excel-Access האמת שכבר לא הבנתי מה אתה בדיוק מתכווין.. אולי כדאי שתביא קטע דוגמה שמבוסס על הצורך המדוייק.
HYPERLINK זה בסך הכל יוצר לינק בתא, לא? אז למה שהעיצוב שלו יהיה שונה משאר הלינקים, כפי שהעליתי מקודם (אני לא טוען מידיעה, לא נתקלתי בדבר כזה, וחיפשתי כעת קצת בתיעוד ולא מצאתי שקיים דבר כזה..)
מלבד זה נוסחאות בתא עצמו אף פעם לא נשמרות בגיליון אלא מחושבות בהפעלה, לצורך העניין אם תיגש לנתונים כשהגיליון סגור, תקבל רק את הנוסחה ולא את התוצאה שלה..
@Y-Excel-Access כתב בגוגל שיטס - איך להעתיק היפר קישור בין חוברות עבודה:
(שאם לוחצים על התא זה מפנה אותנו לשם - כמו כל פעם שאתה כותב מייל זה יוצר אותו כהיפר קישור אוטומטית, וכדו')
עד עכשיו לא הבנתי שלזה אתה מתכווין, אני לא בטוח שזה יושב בכלל בהגדרות העיצוב של התא, ולא משהו שמרונדר בהצגת הגיליון (כמו שלא שייך למצוא במייל את ה"עיצוב" של הלינקים, כי זה אכן לא קיים בגוף המייל, אלא מרונדר אוטומטית ע"י ג'ימייל בעת הצגת ההודעה)
@Y-Excel-Access כעת אני חושב שאולי זה יעזור לך
let spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('N3').copyTo(spreadsheet.getRange('N5'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
בפשטות זה אמור לעבוד גם מחוברת עבודה אחרת,
@Y-Excel-Access אני לא מכיר פונקציה שמקבלת את כל עיצוב התא, תצטרך לכתוב בעצמך פונקציה בסגנון הזה שמקבל את כל ערכי העיצוב שאתה צריך
let sourceCell = SpreadsheetApp.getActiveSheet().getRange('גיליון1!A1');
let destinationCell = SpreadsheetApp.getActiveSheet().getRange('גיליון1!A2');
let fontSize = sourceCell.getFontSize();
let backgroundColor = sourceCell.getBackgroundColor();
let fontWeight = sourceCell.getFontWeight();
destinationCell.setFontSize(fontSize);
destinationCell.setBackgroundColor(backgroundColor);
destinationCell.setFontWeight(fontWeight);
@OdedDvir כתב בשימוש עם VScode בSSH בשרת זוללת משאבים??:
שימוש עם VScode בכל מחשב שהוא - זולל משאבים. נקודה.
ברור. אאל"ט זה אלקטרון++
@pelephone התכוונתי לא לדאוג שאני מפרסם את הכתובת "האישית" שלי כביכול...
@מנצפכ כתב בשיתוף: כמה כתובות מייל על גימייל אחד:
לפני כשבוע בערך עשיתי משהו שמוסיף לזיהוי של השליחה עד מאות ואלפי מיילים נוספים או מוחק אותם לפי בחירה אבל התכבה לי המחשב באמצע העבודה בלי שמירה
?
@pelephone למה אתה חושב שזה נכנס לספאם?