5
Contributors
4
Replies
7
Views
6 Years
Discussion Span
Last Post by crishlay
0

Hi All,

I would like to seek for help in the matter above..

How can I delete row data in datagrid?

if (dataGridView1.Rows.Count > 1)
{

DataTable dtDelete = dtable;
dtDelete.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
dataGridView1.DataSource = dtDelete;
}

0

hi, try this code:-

public void mydgDelete(object sender, DataGridCommandEventArgs e)
    {
        mydg.Columns[0].HeaderText = "Delete";

        string del = "delete from Student where StudentID=@StudentID";
        SqlCommand cmddel = new SqlCommand(del, sqlcon);

        cmddel.Parameters.Add(new SqlParameter("@StudentID", SqlDbType.Int));
        cmddel.Parameters["@StudentID"].Value = mydg.DataKeys[(int)e.Item.ItemIndex];

        sqlcon.Open();
        try
        {
            cmddel.ExecuteNonQuery();
            Response.Write("<font color=blue> Record(s) Deleted! </font>");

        }
        catch (SqlException)
        {
            Response.Write("<font color=red> Deleting Failed! </font>");

        }     
        sqlcon.Close();
    }
0

Introduction

In the previous article we have seen how to add a Checkbox Column In DataGrid and how to achieve multi select delete operation. In this article we will see how we can select all rows of DataGrid and delete all selected.

Creating Silverlight Project

Fire up Visual Studio 2008 and create a new Silverlight 3 Project. Name it as SelectAllRowsDataGrid.

1.gif

First we will design our application to have a DataGrid to display data and a Button to Delete Selected Rows.

2.gif

As you see we have customized the Columns in the DataGrid.

Now we will add a CheckBox Control in the Header of first column.

I tried many ways to put a CheckBox over there, but the effective way is to create a style and assign the style to HeaderStyle of that Column.

Here is the Style in XAML.

<UserControl.Resources>
<Style x:Key="DataGridColumnHeaderStyle" TargetType="dataPrimitives:DataGridColumnHeader">
          <Setter Property="Foreground" Value="#FF000000"/>
          <Setter Property="HorizontalContentAlignment" Value="Left"/>
          <Setter Property="VerticalContentAlignment" Value="Center"/>
          <Setter Property="IsTabStop" Value="False"/>
          <Setter Property="SeparatorBrush" Value="#FFC9CACA"/>
          <Setter Property="Padding" Value="4"/>
          <Setter Property="Template">
          <Setter.Value>
          <ControlTemplate TargetType="dataPrimitives:DataGridColumnHeader">
          <Grid x:Name="Root">
                   <Grid.ColumnDefinitions>
                   <ColumnDefinition/>
                   <ColumnDefinition Width="Auto"/>
                   </Grid.ColumnDefinitions>
                   <VisualStateManager.VisualStateGroups>
                   <VisualStateGroup x:Name="CommonStates">
                   <VisualState x:Name="Normal"/>
                   <VisualState x:Name="MouseOver">
          <Storyboard>
          <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="(Fill).Color" To="#FF448DCA"/>
          <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[3].Color" To="#7FFFFFFF"/>
          <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[2].Color" To="#CCFFFFFF"/>
          <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[1].Color" To="#F2FFFFFF"/>
          </Storyboard>
          </VisualState>
          <VisualState x:Name="Pressed">
          <Storyboard>
          <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="(Fill).Color" To="#FF448DCA"/>
          <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[0].Color" To="#D8FFFFFF"/>
          <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[1].Color" To="#C6FFFFFF"/>
          <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[2].Color" To="#8CFFFFFF"/>
          <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Fill).(GradientStops)[3].Color" To="#3FFFFFFF"/>
          </Storyboard>
          </VisualState>
          </VisualStateGroup>
          <VisualStateGroup x:Name="SortStates">
          <VisualState x:Name="Unsorted"/>
          <VisualState x:Name="SortAscending"/>
          <VisualState x:Name="SortDescending"/>
          </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <Rectangle x:Name="BackgroundRectangle" Fill="#FF1F3B53" Stretch="Fill" Grid.ColumnSpan="2"/>
          <Rectangle x:Name="BackgroundGradient" Stretch="Fill" Grid.ColumnSpan="2">
          <Rectangle.Fill>
          <LinearGradientBrush EndPoint=".7,1" StartPoint=".7,0">
          <GradientStop Color="#FCFFFFFF" Offset="0.015"/>
          <GradientStop Color="#F7FFFFFF" Offset="0.375"/>
          <GradientStop Color="#E5FFFFFF" Offset="0.6"/>
          <GradientStop Color="#D1FFFFFF" Offset="1"/>
          </LinearGradientBrush>
          </Rectangle.Fill>
          </Rectangle>
          <Rectangle x:Name="VerticalSeparator" Fill="{TemplateBinding SeparatorBrush}" VerticalAlignment="Stretch" Width="1" Visibility="{TemplateBinding SeparatorVisibility}" Grid.Column="1"/>
          <CheckBox x:Name="chkSelectAll" Click="chk_Click"  Margin="2,0,0,0" Content="Select" d:LayoutOverrides="Width, Height" VerticalAlignment="Center" HorizontalAlignment="Left"/>
          </Grid>
          </ControlTemplate>
          </Setter.Value>
          </Setter>
</Style>
</UserControl.Resources>

Now assign the Style to your HeaderStyle of the Column.

<data:DataGrid x:Name="dgPerson" Margin="8" Grid.Column="1" IsReadOnly="True" 
                   LoadingRow="dgPerson_LoadingRow" Grid.Row="1" AutoGenerateColumns="False">
            <data:DataGrid.Columns>
                <data:DataGridTemplateColumn Width="80" HeaderStyle="{StaticResource DataGridColumnHeaderStyle}">
                    <data:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox x:Name="chkPerson" Click="chkPerson_Click"
                                      VerticalAlignment="Center" IsChecked="false" HorizontalAlignment="Center" HorizontalContentAlignment="Center"/>
                        </DataTemplate>
                    </data:DataGridTemplateColumn.CellTemplate>
                </data:DataGridTemplateColumn>
                <data:DataGridTextColumn Header="Name" Binding="{Binding Name}" MinWidth="120" Width="SizeToCells" CanUserReorder="True" CanUserSort="True"/>
                <data:DataGridTextColumn Header="Age" Binding="{Binding Age}" MinWidth="75" Width="SizeToCells" CanUserReorder="True" CanUserSort="True"/>
                <data:DataGridTextColumn Header="Country" Binding="{Binding Country}" MinWidth="120" Width="SizeToCells" CanUserReorder="True" CanUserSort="True"/>
                <data:DataGridTextColumn Header="Gender" Binding="{Binding Gender}" MinWidth="120" Width="SizeToCells" CanUserReorder="True" CanUserSort="True"/>
                <data:DataGridTextColumn Header="Email Id" Binding="{Binding EmailId}" MinWidth="120" Width="SizeToCells" CanUserReorder="True" CanUserSort="True"/>
                <data:DataGridTextColumn Header="Joined On" Binding="{Binding JoinedOn}" MinWidth="120" Width="SizeToCells" CanUserReorder="True" CanUserSort="True"/>
            </data:DataGrid.Columns>
</data:DataGrid>

Now Run the Application to see the Header CheckBox.

3.gif

Now we will create a class that will hold the Properties of sample data and create sample data to populate the DataGrid.

public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Country { get; set; }
        public string Gender { get; set; }
        public string EmailId { get; set; }
        public DateTime JoinedOn { get; set; }
    }
       //List for Original List of Persons
        ObservableCollection<Person> myList;
        //List for selected Persons
        ObservableCollection<Person> personList = new ObservableCollection<Person>();

        public MainPage()
        {
            InitializeComponent();
            myList = new ObservableCollection<Person>()
            {
                new Person{ Name="Person 1", Age=21, Country="India", Gender="Male", EmailId="some@some.com", JoinedOn=DateTime.Now},
                new Person{ Name="Person 2", Age=29, Country="India", Gender="Male", EmailId="some@some.com", JoinedOn=DateTime.Now},
                new Person{ Name="Person 3", Age=20, Country="India", Gender="Male", EmailId="some@some.com", JoinedOn=DateTime.Now},
                new Person{ Name="Person 4", Age=22, Country="India", Gender="Male", EmailId="some@some.com", JoinedOn=DateTime.Now},
                new Person{ Name="Person 5", Age=23, Country="India", Gender="Female", EmailId="some@some.com", JoinedOn=DateTime.Now},
                new Person{ Name="Person 6", Age=23, Country="India", Gender="Male", EmailId="some@some.com", JoinedOn=DateTime.Now},
                new Person{ Name="Person 7", Age=25, Country="India", Gender="Female", EmailId="some@some.com", JoinedOn=DateTime.Now},
                new Person{ Name="Person 8", Age=25, Country="India", Gender="Female", EmailId="some@some.com", JoinedOn=DateTime.Now},
                new Person{ Name="Person 9", Age=24, Country="India", Gender="Male", EmailId="some@some.com", JoinedOn=DateTime.Now}
            };
            dgPerson.ItemsSource = myList;
        }

We will add the event for LoadingRow for the DataGrid.

private void dgPerson_LoadingRow(object sender, DataGridRowEventArgs e)
{
    CheckBox chk = (CheckBox)this.dgPerson.Columns[0].GetCellContent(e.Row);
    chk.Click += new RoutedEventHandler(chkPerson_Click);
    Person p = chk.DataContext as Person;
    chk.IsChecked = personList.Contains(p);
}

Now we will add the Click event handler to the Header CheckBox and the CheckBox in DataGrid Rows.

void chk_Click(object sender, RoutedEventArgs e)
{
    CheckBox chk = sender as CheckBox;
    bool check = chk.IsChecked.Value;
    if (check)
    {
        foreach (Person p in myList)
        {
            personList.Add(p);
            chk = dgPerson.Columns[0].GetCellContent(p) as CheckBox;
            if (chk != null)
                chk.IsChecked = true;
        }
    }
    else
    {
        foreach (Person p in myList)
        {
            chk = dgPerson.Columns[0].GetCellContent(p) as CheckBox;
            if (chk != null)
                chk.IsChecked = false;
        }
        personList.Clear();
    }
} 

private void chkPerson_Click(object sender, RoutedEventArgs e)
{
    CheckBox chk = sender as CheckBox;
    bool check = chk.IsChecked.Value;
    Person p = chk.DataContext as Person;
    if (check)
    {
        if (!personList.Contains(p))
            personList.Add(p);
    }
    else
    {
        personList.Remove(p);
    }
}

Now we will have the Delete Button Click handler.

private void btnDelete_Click(object sender, RoutedEventArgs e)
{
    string persons = string.Empty;
    foreach (var item in personList)
    {
        myList.Remove(item);
    }
    dgPerson.ItemsSource = myList;
    personList.Clear();
}

Now we will run the application and test the application.

4.gif

If we click on the Select CheckBox in the header of the First Column, all the rows would be selected.

5.gif

Now if we don't need everything to be selected but few, then we would uncheck the respective rows.

6.gif

Now we would delete the selected rows.

7.gif

Edited by Nick Evan: Fixed formatting

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.