How to remove datatable from dataset?

25.2k views Asked by At

.aspx code:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SearchCustomer.aspx.cs" Inherits="WebApplication1.eyeofheaven.SearchCustomer" %>

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link rel="stylesheet" type="text/css" href="StyleSheets/SearchCustomerStyle.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<title>Search Customer</title>
</head>
<body>
<form id="form1" runat="server">
 <div class="row">
    <div class="twelve columns">
            <!-- Header-->
            <div class="container">
                <nav role="navigation" class="navbar navbar-inverse navbar-fixed-top">
                    <!-- Brand and toggle get grouped for better mobile display -->
                    <div class="navbar-header">
                        <button type="button" data-target="#navbarCollapse" data-toggle="collapse" class="navbar-toggle">
                            <span class="sr-only">Toggle navigation</span>
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                        </button>
                    </div>
                    <!-- Collection of nav links, forms, and other content for toggling -->
                    <div id="navbarCollapse" class="collapse navbar-collapse">
                        <ul class="nav navbar-nav">
                            <li><a href="EyeOfHeaven.aspx">Home</a></li>
                            <li class="dropdown">
                                <a data-toggle="dropdown" class="dropdown-toggle active" href="#">Search<b class="caret"></b></a>
                                <ul role="menu" class="dropdown-menu">
                                    <li><a href="SearchCustomer.aspx">Search Form(Customer)</a></li>
                                    <li><a href="SearchVehicle.aspx">Search Form(Vehicle)</a></li>
                                </ul>
                            </li>
                        </ul>
                    </div>
                </nav>
            </div>
    </div>
</div>

<!-- Search form customer-->
<div id="searchcustomer" class="page-header">
    <h3><span class="glyphicon glyphicon-th-large"></span>Search Customer</h3>
</div>

<div class="row">
    <div class="col-md-4">
        <input type="text" runat="server" id="search" size="20" class="form-control" placeholder="Customer ID">
    </div>
    <div class="col-md-4">
        <select class="form-control" runat="server" id="Country">
            <option value="select" selected disabled>Search by Country</option>
            <option value="A:C ESTUDIO">A:C ESTUDIO</option>
            <option value="Aaron McEwen-194712">Aaron McEwen-194712</option>
            <option value="Accra">Accra</option>
            <option value="Adoany">Adoany</option>
            <option value="Aduanas">Aduanas</option>
            <option value="Alex Sanchez-259029">Alex Sanchez-259029</option>
            <option value="ALG Consulting-288078">ALG Consulting-288078</option>
            <option value="Algeria">Algeria</option>
            <option value="Algimantas Ramaskevicius">Algimantas Ramaskevicius</option>
        </select>
    </div>  

    <div class="col-md-4">
        <select class="form-control" runat="server" id="Currency">
            <option value="selected" selected disabled>Search by Currency</option>
            <option value="AUD">AUD (Australian Dollar)</option>
            <option value="EUR">EUR (Euro)</option>
            <option value="GBP">GBP (United Kingdom Pounds)</option>
            <option value="JPY">JPY (Japan Yen)</option>
            <option value="NZD">NZD (New Zealand Dollar)</option>
        </select>
    </div>
</div>

<div class="row">
    <div class="col-md-4">
<button type="button" runat="server" onserverclick="Button1_Click" id="searchinfo" class="btn btn-primary"><span class="glyphicon glyphicon-search"></span> Search Info</button>
<button type="button" runat="server" onserverclick="Button2_Click" id="Button2" class="btn btn-danger"><span class="glyphicon glyphicon-repeat"></span>Reset</button>
    </div>
</div>
<!-- Information Table-->
<div id="gridview">
    <asp:GridView runat="Server" id="data" CssClass="table table-striped table-bordered table-responsive">
    </asp:GridView>
</div>

</form>
</body>
</html>

.aspx code behind:

using MSSQLConnector;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1.eyeofheaven
{
    public partial class SearchCustomer : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button1_Click(object sender, EventArgs e)
        {

            MSConnector connector = new MSConnector();
            connector.ConnectionString = "SERVER=xbetasql,52292;UID=username;Password=secret;DATABASE=ATDBSQL;";

            string customer = (this.search.Value);
            string country = (this.Country.Value);
            string idcurrency = (this.Currency.Value);
            string query = null;

            if (country != "select")
            {
                if (idcurrency != "selected")
                {
                    query = "select * from customer where country = '" + country + "' and idcurrency = '" + idcurrency + "'";
                }
                else
                {
                    query = "select * from customer where country = '" + country + "'";
                }
            }
            DataSet selectedData = connector.ExecuteQuery(query);
            DataTable dt = selectedData.Tables[0];
            if (dt.Rows.Count > 0)
            {
                data.DataSource = dt;
                data.DataBind();
            }
            else
            {
                Response.Write("<script>alert('No Data Found.')</script>");
            }
        }
        protected void Button2_Click(object sender, EventArgs e, MSConnector connector, string query)
        {
            DataSet selectedData = connector.ExecuteQuery(query);
            DataTable dt = selectedData.Tables.Remove(dt);
            this.search.Value = "";
            this.Country.Value = "select";
            this.Currency.Value = "selected";

        }
    }
}

I have a problem in my code, I want to remove the datatable from dataset when I click on Button2_Click as a reset button for all. But I have an error in my code in here:

DataTable dt = selectedData.Tables.Remove(dt);

It says:

Cannot implicitly convert type 'void' to 'System.Data.DataTable'

Does passing my dataset and datatable is the problem on the function Button2_Click()?

4

There are 4 answers

1
Mairaj Ahmad On BEST ANSWER

You only need this

selectedData.Tables.Remove(dt);

But it would be better if you first check that DataSet contains the table which you are trying to remove. Also check if the DataTable can be removed from DataSet as pointed by Gianni B.

if(selectedData.Tables.Contains(dt.name) && selectedData.Tables.CanRemove(dt))
   selectedData.Tables.Remove(dt);

Remove method does not return anything. It's return type is void You are trying to assign a datatable returned by Remove method while actually it doesn't return anything

1
Chandan Kumar On

The line which you have written

DataTable dt = selectedData.Tables.Remove(dt);

is wrong, as remove method does not return anything.

So you need to change your code as

selectedData.Tables.Remove(dt);
if(selectedData != null && selectedData.Tables.Count > 0)
{
   DataTable dt = selectedData.Tables[0];
}
0
Kun-Zhang Wu On

Try this:

DataTable dtDelete = new DataTable();
dtDelete = ds_RecipeData.Tables[0]
if (ds_RecipeData.Tables.Contains(dtDelete.TableName))
    if (ds_RecipeData.Tables.CanRemove(dtDelete))
      ds_RecipeData.Tables.Remove(dtDelete);
1
Roberto Daniel Crema On

It is not the same Datatable despite entering the TableName, so ds.Tables.Remove does not work correctly. This works for me

DataTable dt = new DataTable();

int i = ds.Tables.IndexOf(dt.TableName);

dt = ds.Tables[i];

ds.Tables.Remove(dt);