Jerrin George Mathew
Jerrin George Mathew

Reputation: 29

Not able to clear datagrid view in c#

I'm trying to add data from a variable to a datagrid everytime a function is called .Also i make sure that everytime the grid is cleared when the function is called. But the data gets appended everytime i call the function. Can anyone help me with this? databinding is a class which contains string variables as members.

XAML

<TextBox 
    x:Name="TextOutput" 
    HorizontalAlignment="Left" 
    Height="44" 
    Margin="23,56,0,0" 
    Grid.Row="9" 
    TextWrapping="Wrap" 
    VerticalAlignment="Top" 
    Width="545" 
    Grid.ColumnSpan="2" 
    BorderBrush="{DynamicResource {x:Static SystemColors.DesktopBrushKey}}"
    />
<Button 
    x:Name="bootUpMsg" 
    Content="Read Boot Up Msg" 
    Margin="22,28,59,0" 
    Grid.Row="9" 
    VerticalAlignment="Top" 
    Click="onBootUpClick" 
    Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" 
    Foreground="{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}" 
    IsEnabled="False"
    />
<Button 
    x:Name="startRead" 
    Content="Start Real Data RD" 
    HorizontalAlignment="Left" 
    Margin="163,28,0,0" 
    Grid.Row="9" 
    VerticalAlignment="Top" 
    Width="120" 
    ToolTip="Start reading data" 
    ToolTipService.ShowDuration="800" 
    Click="onStartClick" 
    Grid.ColumnSpan="2" 
    Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" 
    Foreground="{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}" 
    IsEnabled="False"
    />
<DataGrid 
    x:Name="dataGrid" 
    HorizontalAlignment="Left" 
    Margin="12,110,0,0" 
    Grid.Row="9" 
    VerticalAlignment="Top" 
    Height="352" 
    Width="858" 
    Grid.ColumnSpan="3" 
    BorderBrush="{DynamicResource {x:Static SystemColors.DesktopBrushKey}}" 
    Background="{DynamicResource {x:Static SystemColors.GradientInactiveCaptionBrushKey}}" 
    Foreground="{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}"
    >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Sl.No"            Width="50"   Binding="{Binding Path=Sl_No}"/>
        <DataGridTextColumn Header="Task ID"          Width="50"   Binding="{Binding Path=TaskID}"/>
        <DataGridTextColumn Header="Task Name"        Width="150"  Binding="{Binding Path=TaskName}"/>
        <DataGridTextColumn Header="Core ID"          Width="50"   Binding="{Binding Path=CoreID}" />
        <DataGridTextColumn Header="Start Time (μs)"  Width="100"  Binding="{Binding Path=StartTime}"/>
        <DataGridTextColumn Header="End Time (μs)"    Width="100"  Binding="{Binding Path=StopTime}"/>
        <DataGridTextColumn Header="Run Time(μs)"     Width="80"   Binding="{Binding Path=ExecutedTime}"/>
        <DataGridTextColumn Header="Runnable Address" Width="105"  Binding="{Binding Path=FunctAdd}"/>
        <DataGridTextColumn Header="Runnable Name"    Width="200"  Binding="{Binding Path=FunctName}"/>
    </DataGrid.Columns>
</DataGrid>

C#

  public void displayDetails(int scale)
    {
        dGrid.Items.Clear();
        dGrid.Items.Refresh();
        int taskCount = 0;
        int tasklevel = 0;
        List<dataBinding> griddata=new List<dataBinding>();
        CTask interruptedtask;
        System.Collections.Stack taskstack = new System.Collections.Stack();
        int slCnt = 0;
        foreach (CCore c in _viewModel.coreList)
        {
            c.taskList.Sort();//sorting of tasks in tasklist before plotting
            taskCount = 0;
            tasklevel = 0;
            foreach (CTask t in c.taskList)
            {
                slCnt++;
                var data = new dataBinding
                {
                    Sl_No = slCnt.ToString(),
                    FunctName = "-",
                    FunctAdd = "-",
                    StartTime = t.taskStartTime.ToString(),
                    StopTime = t.taskEndTime.ToString(),
                    CoreID = c.coreName.ToString(),
                    TaskID = t.task_id.ToString(),
                    TaskName = t.taskName,
                    ExecutedTime = t.runTime.ToString(),
                };
              dGrid.Items.Add(data);
                if (taskstack.Count == 0)
                {
                    taskstack.Push(t);
                }
                else
                {
                    while (taskstack.Count != 0)
                    {
                        interruptedtask = (CTask)taskstack.Pop();
                        if (t.taskStartTime > interruptedtask.taskStartTime && t.taskEndTime < interruptedtask.taskEndTime)
                        {
                            tasklevel++;
                            taskstack.Push(interruptedtask);
                            taskstack.Push(t);
                            break;
                        }
                        else
                        {
                            if (taskstack.Count == 0)
                            {
                                taskstack.Push(t);
                                break;
                            }
                            if (tasklevel != 0)
                            {
                                tasklevel--;
                            }
                        }
                    }
                }
                ++taskCount;
                if (t.taskEndTime != 0)
                {
                    currentTaskRect = new Rectangle
                    {
                        Width = horizonatlZoom * 40 * (Math.Abs((t.taskEndTime - t.taskStartTime) / scale)),
                        Height = 10 + (verticalZoom) * 2,
                        Fill = _taskcolour[t.task_id],
                        Stroke = Brushes.Black,
                        StrokeThickness = .4,
                        ToolTip = t.taskName + " : " + t.taskStartTime + " - " + t.taskEndTime + ", Duration-" + (t.taskEndTime - t.taskStartTime) + "μs"
                    };
                }
                switch (c.coreName)
                {
                    case "core0":
                        if (t.taskEndTime != 0)
                            _myCanvas.Width = ((t.taskEndTime + scale) * 40 * horizonatlZoom) / scale;
                        _myCanvas.MaxWidth = _myCanvas.Width;
                        if (!_myCanvas.Children.Contains(currentTaskRect))
                        {
                            _myCanvas.Children.Add(currentTaskRect);
                            Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((t.taskStartTime) / scale));
                            Canvas.SetBottom(currentTaskRect, 420 + tasklevel * (35 + (verticalZoom) * 4));
                        }
                        break;
                    case "core1":
                        if (t.taskEndTime != 0)
                            _myCanvas.Width = ((t.taskEndTime + scale) * 40 * horizonatlZoom) / scale;
                        if (!_myCanvas.Children.Contains(currentTaskRect))
                        {
                            _myCanvas.Children.Add(currentTaskRect);
                            Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((t.taskStartTime) / scale));
                            Canvas.SetBottom(currentTaskRect, 220 + tasklevel * (35 + (verticalZoom) * 4));
                        }
                        break;
                    case "core2":
                        if (t.taskEndTime != 0)
                            _myCanvas.Width = ((t.taskEndTime + scale) * 40 * horizonatlZoom) / scale;
                        if (!_myCanvas.Children.Contains(currentTaskRect))
                        {
                            _myCanvas.Children.Add(currentTaskRect);
                            Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((t.taskStartTime) / scale));
                            Canvas.SetBottom(currentTaskRect, 20 + tasklevel * (35 + (verticalZoom) * 4));
                        }
                        break;
                    default:
                        if (t.taskEndTime != 0)
                            _myCanvas.Width = ((t.taskEndTime + scale) * 40 * horizonatlZoom) / scale;
                        if (!_myCanvas.Children.Contains(currentTaskRect))
                        {
                            _myCanvas.Children.Add(currentTaskRect);
                            Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((t.taskStartTime) / scale));
                            Canvas.SetBottom(currentTaskRect, 20 + tasklevel * (35 + (verticalZoom) * 4));
                        }
                        break;
                }
                foreach (CRunnable r in t.runableList)
                {
                    // draw runnable rectangles 
                    slCnt++;
                    var data2 = new dataBinding
                    {
                        Sl_No = slCnt.ToString(),
                        FunctName = r.runnableName,
                        FunctAdd = r.runnableaddress.ToString("X"),
                        StartTime = r.startTime.ToString(),
                        StopTime = r.endTime.ToString(),
                        CoreID = c.coreName.ToString(),
                        TaskID = t.task_id.ToString(),
                        TaskName = t.taskName,
                        ExecutedTime = r.runTime.ToString()
                    };
                    dGrid.Items.Add(data2);
                    if (r.endTime != 0)
                    {
                        currentTaskRect = new Rectangle
                        {
                            Width = horizonatlZoom * 40 * (Math.Abs((r.endTime - r.startTime) / scale)),
                            Height = 20 + (verticalZoom) * 2,
                            Fill = r.runnableName == "NOTFOUND" ? brushArray[5] : _runnablecolour[r.runnableaddress.ToString("X")],
                            Stroke = Brushes.Black,
                            StrokeThickness = .4,
                            ToolTip = r.runnableName + " : " + r.startTime + " - " + r.endTime + ", Duration-" + (r.endTime - r.startTime) + "μs"
                        };
                    }
                    switch (c.coreName)
                    {
                        case "core0":

                            if (!_myCanvas.Children.Contains(currentTaskRect))
                            {
                                _myCanvas.Children.Add(currentTaskRect);
                                Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((r.startTime) / scale));
                                Canvas.SetBottom(currentTaskRect, 430 + tasklevel * (35 + (verticalZoom) * 4) + (verticalZoom) * 2);
                            }
                            break;
                        case "core1":

                            if (!_myCanvas.Children.Contains(currentTaskRect))
                            {
                                _myCanvas.Children.Add(currentTaskRect);
                                Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((r.startTime) / scale));
                                Canvas.SetBottom(currentTaskRect, 230 + tasklevel * (35 + (verticalZoom) * 4) + (verticalZoom) * 2);
                            }
                            break;
                        case "core2":

                            if (!_myCanvas.Children.Contains(currentTaskRect))
                            {
                                _myCanvas.Children.Add(currentTaskRect);
                                Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((r.startTime) / scale));
                                Canvas.SetBottom(currentTaskRect, 30 + tasklevel * (35 + (verticalZoom) * 4) + (verticalZoom) * 2);
                            }
                            break;
                        default:

                            if (!_myCanvas.Children.Contains(currentTaskRect))
                            {
                                _myCanvas.Children.Add(currentTaskRect);
                                Canvas.SetLeft(currentTaskRect, horizonatlZoom * 40 * ((r.startTime) / scale));
                                Canvas.SetBottom(currentTaskRect, 30 + tasklevel * (35 + (verticalZoom) * 4) + (verticalZoom) * 2);
                            }
                            break;
                    }
                }
            }
        }

Upvotes: 0

Views: 206

Answers (1)

mm8
mm8

Reputation: 169400

If the data gets appended to the Items collection of the DataGrid again after you have called dGrid.Items.Clear() you need to make sure that you are also clearing either the _viewModel.coreList collection or/and the taskList collection of each coreList in the view model somehere.

Otherwise the same items will obviously be added to the DataGrid again after it has been cleared since you are iterating over these collections and add them to the Items collection of the DataGrid in your displayDetails method...

Upvotes: 1

Related Questions