Guna  Rakulan

Guna Rakulan

1611792720

Measuring Properties of Labeled / Segmented Regions

This video explains the process of measuring and reporting properties of labeled / segmented objects in images. The process is plain and simple in Python.

Code generated in the video can be downloaded from here:

Subscribe: https://www.youtube.com/channel/UC34rW-HtPJulxr5wp2Xa04w

#python

What is GEEK

Buddha Community

Measuring Properties of Labeled / Segmented Regions
Sean Robertson

Sean Robertson

1574307124

How to add CRUD Operations to Angular using ASP.NET Web API and MongoDB

MongoDB is a NoSQL, free, open source, high-performance, and cross-platform document-oriented database. MongoDB was developed by the 10gen company that is now called MongoDB Inc. MongoDB is written in C++ and stores data in a flexible, JSON-like format with a dynamic schema.

Prerequisites

  • We should have the basic knowledge of Angular, MongoDB, and Web API.
  • The Visual Studio Code IDE should be installed.
  • Robo 3T or Studio 3T should be installed.

Create a Database and Collection in MongoDB

MongoDB Environment Setup

Check how to set up the MongoDB environment and Robo 3T, from here.

Step 1

Now, open Robo 3T and connect to the local server.
Connecting to localhost

Step 2

Create a database with the name “employee” using Robo 3T (Check Link).

Create a Web API Project

Step 1

Open Visual Studio and create a new project.
Creating a project

Change the name to CrudWithMongoDB.

Changing project name

Choose the WEB API template.

Step 2

Now, add the MongoDB Driver for C# using NuGet Package Manager.

Go to Tools>>NuGet Package Manager >> Manage NuGet package for Solution.

Managing NuGet package

Step 3

Right-click the Models folder and add two classes, Employee and Status. Now, paste the following codes in these classes.

Add the required namespaces in the Employee class.

using MongoDB.Bson;  
using MongoDB.Bson.Serialization.Attributes;  

Employee class

 public class Employee  
       {  
           [BsonRepresentation(BsonType.ObjectId)]  
           public String Id { get; set; }  
           public string Name { get; set; }  
           public string  { get; set; }  
           public string Address { get; set; }  
           public string City { get; set; }  
           public string Country { get; set; }  
       }  

Status class

  public class Status  
       {  
           public string Result { set; get; }  
           public string Message { set; get; }  
       }  

Step 4

Now, add a connection string in the web.config file and add the following line in the App Settings section of that file.

<add key="connectionString" value="mongodb://localhost"/>    

Step 5

Right-click on the Controllers folder and add a new controller. Name it “Emp controller.”

Add the following namespaces in the Emp controller.

using MongoDB.Driver;  
using MongoDB.Bson;  
using CrudWithMongoDB.Models;  

Now, add a method to insert data into the database for inserting employee details.

    [Route("InsertEmployee")]  
           [HttpPost]  
           public object Addemployee(Employee objVM)  
           {  
               try  
               {   ///Insert Emoloyeee  
                   #region InsertDetails  
                   if (objVM.Id == null)  
                   {  
                       string constr = ConfigurationManager.AppSettings["connectionString"];  
                       var Client = new MongoClient(constr);  
                       var DB = Client.GetDatabase("Employee");  
                       var collection = DB.GetCollection<Employee>("EmployeeDetails");  
                       collection.InsertOne(objVM);  
                       return new Status  
                       { Result = "Success", Message = "Employee Details Insert Successfully" };  
                   }  
                   #endregion  
                   ///Update Emoloyeee  
                   #region updateDetails  
                   else  
                   {  
                       string constr = ConfigurationManager.AppSettings["connectionString"];  
                       var Client = new MongoClient(constr);  
                       var Db = Client.GetDatabase("Employee");  
                       var collection = Db.GetCollection<Employee>("EmployeeDetails");  

                       var update = collection.FindOneAndUpdateAsync(Builders<Employee>.Filter.Eq("Id", objVM.Id), Builders<Employee>.Update.Set("Name", objVM.Name).Set("Department", objVM.Department).Set("Address", objVM.Address).Set("City", objVM.City).Set("Country", objVM.Country));  

                       return new Status  
                       { Result = "Success", Message = "Employee Details Update Successfully" };  
                   }  
                   #endregion  
               }  

               catch (Exception ex)  
               {  
                   return new Status  
                   { Result = "Error", Message = ex.Message.ToString() };  
               }  

           }  

Add a new method to delete employee details.

#region DeleteEmployee  
     [Route("Delete")]  
     [HttpGet]  
     public object Delete(string id)  
     {  
         try  
         {  
             string constr = ConfigurationManager.AppSettings["connectionString"];  
             var Client = new MongoClient(constr);  
             var DB = Client.GetDatabase("Employee");  
             var collection = DB.GetCollection<Employee>("EmployeeDetails");  
             var DeleteRecored = collection.DeleteOneAsync(  
                            Builders<Employee>.Filter.Eq("Id", id));  
             return new Status  
             { Result = "Success", Message = "Employee Details Delete  Successfully" };  

         }  
         catch (Exception ex)  
         {  
             return new Status  
             { Result = "Error", Message = ex.Message.ToString() };  
         }  

     }  
     #endregion  

Add a method to get Employee details.

  #region Getemployeedetails  
           [Route("GetAllEmployee")]  
           [HttpGet]  
           public object GetAllEmployee()  
           {  
               string constr = ConfigurationManager.AppSettings["connectionString"];  
               var Client = new MongoClient(constr);  
               var db = Client.GetDatabase("Employee");  
               var collection = db.GetCollection<Employee>("EmployeeDetails").Find(new BsonDocument()).ToList();  
               return Json(collection);  

           }  
           #endregion  

Add a method to get Employee details by Id.

#region EmpdetaisById  
     [Route("GetEmployeeById")]  
     [HttpGet]  
     public object GetEmployeeById(string id)  
     {  
         string constr = ConfigurationManager.AppSettings["connectionString"];  
         var Client = new MongoClient(constr);  
         var DB = Client.GetDatabase("Employee");  
         var collection = DB.GetCollection<Employee>("EmployeeDetails");  
         var plant = collection.Find(Builders<Employee>.Filter.Where(s => s.Id == id)).FirstOrDefault();  
         return Json(plant);  

     }  
     #endregion 

Here is the complete Emp controller code.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Net;  
using System.Net.Http;  
using System.Web.Http;  
using MongoDB.Driver;  
using MongoDB.Bson;  
using CrudWithMongoDB.Models;  
using System.Configuration;  

namespace CrudWithMongoDB.Controllers  
{  
    [RoutePrefix("Api/Employee")]  
    public class EmpController : ApiController  
    {  
        [Route("InsertEmployee")]  
        [HttpPost]  
        public object Addemployee(Employee objVM)  
        {  
            try  
            {   ///Insert Emoloyeee  
                #region InsertDetails  
                if (objVM.Id == null)  
                {  
                    string constr = ConfigurationManager.AppSettings["connectionString"];  
                    var Client = new MongoClient(constr);  
                    var DB = Client.GetDatabase("Employee");  
                    var collection = DB.GetCollection<Employee>("EmployeeDetails");  
                    collection.InsertOne(objVM);  
                    return new Status  
                    { Result = "Success", Message = "Employee Details Insert Successfully" };  
                }  
                #endregion  
                ///Update Emoloyeee  
                #region updateDetails  
                else  
                {  
                    string constr = ConfigurationManager.AppSettings["connectionString"];  
                    var Client = new MongoClient(constr);  
                    var Db = Client.GetDatabase("Employee");  
                    var collection = Db.GetCollection<Employee>("EmployeeDetails");  

                    var update = collection.FindOneAndUpdateAsync(Builders<Employee>.Filter.Eq("Id", objVM.Id), Builders<Employee>.Update.Set("Name", objVM.Name).Set("Department", objVM.Department).Set("Address", objVM.Address).Set("City", objVM.City).Set("Country", objVM.Country));  

                    return new Status  
                    { Result = "Success", Message = "Employee Details Update Successfully" };  
                }  
                #endregion  
            }  

            catch (Exception ex)  
            {  
                return new Status  
                { Result = "Error", Message = ex.Message.ToString() };  
            }  

        }  

        #region Getemployeedetails  
        [Route("GetAllEmployee")]  
        [HttpGet]  
        public object GetAllEmployee()  
        {  
            string constr = ConfigurationManager.AppSettings["connectionString"];  
            var Client = new MongoClient(constr);  
            var db = Client.GetDatabase("Employee");  
            var collection = db.GetCollection<Employee>("EmployeeDetails").Find(new BsonDocument()).ToList();  
            return Json(collection);  

        }  
        #endregion  
        #region EmpdetaisById  
        [Route("GetEmployeeById")]  
        [HttpGet]  
        public object GetEmployeeById(string id)  
        {  
            string constr = ConfigurationManager.AppSettings["connectionString"];  
            var Client = new MongoClient(constr);  
            var DB = Client.GetDatabase("Employee");  
            var collection = DB.GetCollection<Employee>("EmployeeDetails");  
            var plant = collection.Find(Builders<Employee>.Filter.Where(s => s.Id == id)).FirstOrDefault();  
            return Json(plant);  

        }  
        #endregion  
        #region DeleteEmployee  
        [Route("Delete")]  
        [HttpGet]  
        public object Delete(string id)  
        {  
            try  
            {  
                string constr = ConfigurationManager.AppSettings["connectionString"];  
                var Client = new MongoClient(constr);  
                var DB = Client.GetDatabase("Employee");  
                var collection = DB.GetCollection<Employee>("EmployeeDetails");  
                var DeleteRecored = collection.DeleteOneAsync(  
                               Builders<Employee>.Filter.Eq("Id", id));  
                return new Status  
                { Result = "Success", Message = "Employee Details Delete  Successfully" };  

            }  
            catch (Exception ex)  
            {  
                return new Status  
                { Result = "Error", Message = ex.Message.ToString() };  
            }  

        }  
        #endregion  
    }  
}  

Step 6

Now, let’s enable CORS. Go to Tools, open NuGet Package Manager, search for Cors, and install the Microsoft.Asp.Net.WebApi.Cors package.

Installing Microsoft.Asp.Net.Web.Cors package

Open Webapiconfig.cs and add the following lines.

EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*");    
config.EnableCors(cors);   

Create an Project

Step 1

Create an Angular 7 project with the name “CrudwithMongoDB” by using the following command.

 ng new CrudwithMongoDB

Step 2

Open Visual Studio Code, open the newly created project, and add bootstrap to this project.

npm install bootstrap --save

Step 3

Now, create two components for displaying the employee list page and adding a new employee page. To create the components, open terminal and use the following commands.

ng g c employee
ng g c addemployee

Step 4

Create a class named “employee” by using the following command.

ng g class employee

Add the required properties in the class.

export class Employee {  
    Id: string;  
    Name: string;  
    Department: string;  
    Address: string;  
    City: string;  
    Country: string;  
} 

Step 5

Create a service to call the Web API.

ng g s emprecord

Step 6

Open the emprecord service and import the required packages and classes. Add the following lines of code in the emprecord.service.ts file.

    import { Injectable } from '@angular/core';  
    import { Observable } from "rxjs";  
    import {HttpHeaders, HttpClient } from "@angular/common/http";  
    import { Employee } from "../app/employee";  
    @Injectable({  
      providedIn: 'root'  
    })  
    export class EmprecordService {  
       Url="http://localhost:14026/Api/Employee/";  
      constructor(private http:HttpClient) { }  
       InsertEmployee(employee:Employee)  
       {  
         debugger;  
        const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };  
         return this.http.post<Employee[]>(this.Url+'/InsertEmployee/', employee,httpOptions)  
       }  
       GetEmployeeRecord():Observable<Employee[]>  
       {  
         debugger;  
        return this.http.get<Employee[]>(this.Url+"/GetAllEmployee")  
       }  
       DeleteEmployee(id:string):Observable<number>  
       {  
         debugger;  
        return this.http.get<number>(this.Url + '/Delete/?id='+id);  
       }  
       GetEmployeeById(id:string)  
       {  
        return this.http.get<Employee>(this.Url + '/GetEmployeeById/?id=' + id);  
       }  
       UpdatEmplouee(employee:Employee)  
       {  
        debugger;  
        const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };  
         return this.http.post<Employee[]>(this.Url+'/UpdateEmployee/', employee,httpOptions)  
       }  

    }  

Step 7 - Add Paging and Searching

To add paging and searching, install the following library in the project. For pagination:

npm install --save ngx-pagination  

For searching:

npm i ng2-search-filter --save  

Export and import both these directives in the app.module.ts file.

import {NgxPaginationModule} from 'ngx-pagination';  
import { Ng2SearchPipeModule } from 'ng2-search-filter';  

Step 8

Now, open addemployee.component.html and add the following HTML.


    <div class="container" style="padding-top:40px;">    
      <div class="row">    
        <div class="col-md-10 mx-auto">    
          <div class="card mx-4">   
            <div class="card-head p-4">  
                <div class="col-sm-12 btn btn-success">  
                    Employee's Information  
                  </div>  
            </div>   
            <div class="card-body p-4">    
         <form [formGroup]="Addemployee" (ngSubmit)="onFormSubmit(Addemployee.value)">  
        <div class="col-sm-12">  
          <div class="card-body">  
            <!-- <div class="row"> -->  
            <div class="form-group ">  

              <label class="col-sm-2 control-label" for="Name">Name</label>  
              <div class="col-sm-10">  
                <input type="text" class="form-control" placeholder="Enter name" formControlName="Name">  
              </div>  
            </div>  
            <div class="form-group ">  
              <label class="col-sm-2 control-label" for="Department">Department</label>  
              <div class="col-sm-10">  
                <input type="text" class="form-control" placeholder="Enter Department" formControlName="Department">  
              </div>  
            </div>  
            <div class="form-group ">  
              <label class="col-sm-2 control-label" for="Address">Address</label>  
              <div class="col-sm-10">  
                <input type="text" class="form-control" placeholder="Enter Address" formControlName="Address">  
              </div>  
            </div>  
            <div class="form-group ">  
              <label class="col-sm-2 control-label" for="City">City</label>  
              <div class="col-sm-10">  
                <input type="text" class="form-control" placeholder="Enter City" formControlName="City">  
              </div>  
            </div>  
            <div class="form-group ">  
              <label class="col-sm-2 control-label" for="Country">Country</label>  
              <div class="col-sm-10">  
                <input type="text" class="form-control" placeholder="Enter Country" formControlName="Country">  
              </div>  
            </div>  

          </div>  
        </div>  
        <div class="col-6 text-right">    
            <button class="btn btn-primary px-10" type="submit">Add </button>  
          </div>  
      </form>  
          </div>    
        </div>    
      </div>    
      </div>   
    </div>   

Step 9

Open the addemployee.componet.ts file and add the following lines.

	import { Component, OnInit } from '@angular/core';  
    import { HttpClient } from "@angular/common/http";  
    import { FormGroup, FormControl } from '@angular/forms';  
    import { EmprecordService } from "../../emprecord.service";  
    import { Employee } from "../../employee";  
    import { Observable } from "rxjs";  
    import { identifierModuleUrl } from '@angular/compiler';  
    import { Router } from '@angular/router';  
    @Component({  
      selector: 'app-addemployee',  
      templateUrl: './addemployee.component.html',  
      styleUrls: ['./addemployee.component.css']  
    })  
    export class AddemployeeComponent implements OnInit {  
      massage: string;  
      dataSaved = false;  
      Addemployee:FormGroup;  
      EmployeeIdUpdate = "0";  
      constructor(private router: Router,private emprecordService:EmprecordService) { }  

      InsertEmployee(employee:Employee)  
      {  
    debugger;  
        if (this.EmployeeIdUpdate != "0") employee.Id=this.EmployeeIdUpdate;  
          this.emprecordService.InsertEmployee(employee).subscribe(  
            ()=>  
            {  
              if (this.EmployeeIdUpdate == "0") {  
                this.massage = 'Saved Successfully';  

              }  
              else  
              {  
                this.massage = 'Update Successfully';  
              }  
              this.dataSaved = true;  
              this.router.navigate(['/employee']);  
            })  
      }  
      onFormSubmit() {  
        const Emp = this.Addemployee.value;  
        this.InsertEmployee(Emp);  
      }  

      EmployeeEdit(id: string) {  
        debugger;  
        this.emprecordService.GetEmployeeById(id).subscribe(emp => {  
          this.massage = null;  
          this.dataSaved = false;  
          debugger;  
          this.EmployeeIdUpdate=id;  
          this.Addemployee.controls['Name'].setValue(emp.Name);  
          this.Addemployee.controls['Department'].setValue(emp.Department);  
          this.Addemployee.controls['City'].setValue(emp.City);  
          this.Addemployee.controls['Country'].setValue(emp.Country);  
          this.Addemployee.controls['Address'].setValue(emp.Address);  
        });  
        debugger;  
      }  
      clearform() {  
        debugger;  
        this.Addemployee.controls['Name'].setValue("");  
        this.Addemployee.controls['Department'].setValue("");  
        this.Addemployee.controls['Address'].setValue("");  
        this.Addemployee.controls['City'].setValue("");  
        this.Addemployee.controls['Country'].setValue("");  

      }  
      ngOnInit() {  
        this.Addemployee = new FormGroup({  

          Name: new FormControl(),  
          Department:new FormControl(),  
          Address:new FormControl(),  
          City:new FormControl(),  
          Country:new FormControl(),  
      });  
      let Id = localStorage.getItem("id");  
    if(Id!=null)  
    {  
      this.EmployeeEdit(Id) ;  
     }}  
    }  

Step 10

Open employee.componet.html and add this HTML.


    <div class="container" style="margin-bottom:20px;padding-top:20px;">  
      <div class="row">  
        <div class="col-sm-12 btn btn-success">  
          Employee's Information  
        </div>  
      </div>  
      <div class="col-sm-12" style="margin-bottom:20px;padding-top:20px;">  
        <div class="row">  
          <div class="col-sm-6">  
            <button type="button" class="btn btn-primary" data-toggle="modal" routerLink="/addemployee">  
              Add New Employee  
            </button>  
          </div>  
          <div class="col-sm-6">  
            <input class="form-control" type="text" name="search" [(ngModel)]="filter" placeholder="Search">  
          </div>  
        </div>  
      </div>  
    </div>  
    <div class="container" style="padding-top:20px;">  
      <table class="table table-striped">  
        <thead class="thead-dark">  
          <th>Name</th>  
          <th>Department</th>  
          <th>Address</th>  
          <th>City</th>  
          <th>Country</th>  
          <th>Action</th>  
        </thead>  
        <tbody>  
          <tr *ngFor="let e of emp | async|filter:filter| paginate: { itemsPerPage: 5, currentPage: p } ; let i=index">  
            <td>{{e.Name}}</td>  
            <td>{{e.Department}}</td>  
            <td>{{e.Address}}</td>  
            <td>{{e.City}}</td>  
            <td>{{e.Country}}</td>  
            <td>  
              <div class="btn-group">  
                <button type="button" class="btn btn-primary mr-1" (click)="EmployeeEdit(e.Id)">Edit</button>  
                <button type="button" class="btn btn-danger mr-1" (click)="Deleteemployee(e.Id)">Delete</button>  
              </div>  
            </td>  
          </tr>  
        </tbody>  
      </table>  
      <ul class="pagination">  
        <pagination-controls (pageChange)="p = $event"></pagination-controls>  
      </ul>  
    </div>  

Step 11

Open employee.componet.ts file and add the following lines.

	import { Component, OnInit } from '@angular/core';  
    import { Employee } from "../employee";  
    import { EmprecordService } from "../emprecord.service";  
    import { Observable } from "rxjs";  
    import { Router } from '@angular/router';  
    @Component({  
      selector: 'app-employee',  
      templateUrl: './employee.component.html',  
      styleUrls: ['./employee.component.css']  
    })  
    export class EmployeeComponent implements OnInit {  
      private emp: Observable<Employee[]>;  
      massage:String;  
      dataSaved=false;  
      constructor(private router: Router,private emprecordService:EmprecordService) { }  
       Loademployee()  
       {  
          debugger;  
          this.emp = this.emprecordService.GetEmployeeRecord();  
          console.log(this.emp);  

          debugger;  

       }  
       EmployeeEdit(id: string) {  
        debugger;  
       localStorage.removeItem("id");  
       localStorage.setItem("id",id.toString());  
        this.router.navigate(['/addemployee'], { queryParams: { Id: id } });  
        debugger;  
      }  
       Deleteemployee(id: string) {  
        if (confirm("Are You Sure To Delete this Informations")) {  

          this.emprecordService.DeleteEmployee(id).subscribe(  
            () => {  
              this.dataSaved = true;  
              this.massage = "Deleted Successfully";  
            }  
          );  
        }  
      }  
      ngOnInit() {  
        localStorage.clear();
        this.Loademployee();  

      }  

    }  

Step 12

Now, open app-routing.module.ts file and add the following lines to create routing.

	import { NgModule } from '@angular/core';  
    import { Routes, RouterModule } from '@angular/router';  
    import { EmployeeComponent } from "./employee/employee.component";  
    import { AddemployeeComponent } from "./employee/addemployee/addemployee.component";  

    const routes: Routes = [  
     {path:"employee",component:EmployeeComponent},  
     {path:"addemployee",component:AddemployeeComponent},  
    ];  

    @NgModule({  
      imports: [RouterModule.forRoot(routes)],  
      exports: [RouterModule]  
    })  
    export class AppRoutingModule { }  

Step 13

Now, open app.module.ts file and add the following lines.

import { BrowserModule } from '@angular/platform-browser';  
import { NgModule } from '@angular/core';  
import { FormsModule } from '@angular/forms';  
import { AppRoutingModule } from './app-routing.module';  
import { AppComponent } from './app.component';  
import { HttpClientModule,HttpClient} from '@angular/common/http';   
import { EmployeeComponent } from './employee/employee.component';  
import { ReactiveFormsModule } from "@angular/forms";  
import { EmprecordService } from "../app/emprecord.service";  
import { AddemployeeComponent } from './employee/addemployee/addemployee.component';   
import {NgxPaginationModule} from 'ngx-pagination';   
import { Ng2SearchPipeModule } from 'ng2-search-filter';  

@NgModule({  
  declarations: [  
    AppComponent,  
    EmployeeComponent,  
    AddemployeeComponent,  
  ],  
  imports: [  
    BrowserModule,FormsModule,  
    AppRoutingModule,HttpClientModule,ReactiveFormsModule,Ng2SearchPipeModule,NgxPaginationModule  
  ],  
  providers: [EmprecordService],  
  bootstrap: [AppComponent]  
})  
export class AppModule { }

Step 14

Now, let us run the project and redirect the URL to the Addemployee page.

Employee Information form

Step 15

Enter the details and click on the Add button.

Adding employees

Summary

In this article, we discussed how to perform CRUD operations using MongoDB, Angular 8, and Asp.net Web API.

#Angular #MongoDB #dotnet #webdev #api

藤本  結衣

藤本 結衣

1633367280

単純な挿入MYSQLデータベースを使用したASP.NETでの更新と削除の選択

この記事では、ASP.NET WebアプリケーションからMySQLデータベースにデータの選択、更新、および削除を挿入する方法について説明します。

それでは、次の手順に進みましょう。

  • ASP.NETWebページ
  • グリッドビューデータコントロールとMySQLデータベース

次に、MySQLAdminページを開き、[Create A New Table]-> [View]-> [Table Structure for Table`student`]を選択します。

CREATE TABLE IF NOT EXISTS `student` (  
 `SID` int(100) NOT NULL AUTO_INCREMENT,  
 `Name` varchar(100) NOT NULL,  
 `Address` varchar(500) NOT NULL,  
 `Email` varchar(100) NOT NULL,  
 `Mobile` varchar(25) NOT NULL,  
 PRIMARY KEY (`SID`)  
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=31 ; 



Visual Studio 2012のインスタンスを開き、新しいASP.NETWebアプリケーションを作成します。次の図に示すように、プロジェクトに「MYSQLCRUDApplication」という名前を付け



ます。コードビハインドファイル(Student.aspx.cs)に、次のようにコードを記述します

Student.aspx 

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"  
CodeBehind="Student.aspx.cs" Inherits="MYSQLCRUDApplication.Student" %>  
  
<asp:Content ID="Content1" ContentPlaceHolderID="titleContent" runat="server">  
    Simple Insert Select Update and Delete in ASP.NET using MySQL Database   
</asp:Content>  
<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server">  
</asp:Content>  
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">  
    <table>  
        <tr>  
            <td class="td">Name:</td>  
            <td>  
                <asp:TextBox ID="txtName" runat="server"></asp:TextBox></td>  
            <td>  
                <asp:Label ID="lblSID" runat="server" Visible="false"></asp:Label> </td>  
        </tr>  
        <tr>  
            <td class="td">Address:</td>  
            <td>  
                <asp:TextBox ID="txtAddress" runat="server"></asp:TextBox></td>  
            <td> </td>  
        </tr>  
        <tr>  
            <td class="td">Mobile:</td>  
            <td>  
                <asp:TextBox ID="txtMobile" runat="server"></asp:TextBox></td>  
            <td> </td>  
        </tr>  
        <tr>  
            <td class="td">Email ID:</td>  
            <td>  
                <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox></td>  
            <td> </td>  
        </tr>  
        <tr>  
            <td></td>  
            <td>  
                <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />  
                <asp:Button ID="btnUpdate" runat="server" Text="Update" Visible="false"  
OnClick="btnUpdate_Click" />  
                <asp:Button ID="btnCancel" runat="server" Text="Cancel" OnClick="btnCancel_Click" /></td>  
            <td></td>  
        </tr>  
    </table>  
  
    <div style="padding: 10px; margin: 0px; width: 100%;">  
        <p>  
            Total Student:<asp:Label ID="lbltotalcount" runat="server" Font-Bold="true"></asp:Label>  
        </p>  
        <asp:GridView ID="GridViewStudent" runat="server" DataKeyNames="SID"   
            OnSelectedIndexChanged="GridViewStudent_SelectedIndexChanged"  
OnRowDeleting="GridViewStudent_RowDeleting">  
            <Columns>  
                <asp:CommandField HeaderText="Update" ShowSelectButton="True" />  
                <asp:CommandField HeaderText="Delete" ShowDeleteButton="True" />  
            </Columns>  
        </asp:GridView>  
    </div>  
</asp:Content>  

Web.configファイルで、次のように接続文字列を作成します。

Web.config 

<connectionStrings>  
    <add name="ConnectionString"  
connectionString="Server=localhost;userid=root;password=;Database=Testdb"  
providerName="MySql.Data.MySqlClient"/>  
 </connectionStrings>  

ここで、コードビハインドファイル「Student.aspx.cs」で次のコードを使用します。

Student.aspx.cs 

using System;  
using System.Collections.Generic;  
using System.Configuration;  
using System.Data;  
using System.Linq;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
using MySql.Data.MySqlClient;  
  
  
namespace MYSQLCRUDApplication  
{  
    public partial class Student : System.Web.UI.Page  
    {  
        #region MySqlConnection Connection and Page Lode  
        MySqlConnection conn = new  
MySqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);          
        protected void Page_Load(object sender, EventArgs e)  
        {  
            Try  
            {  
                if (!Page.IsPostBack)  
                {  
                    BindGridView();  
                      
                }  
            }  
            catch (Exception ex)  
            {  
                ShowMessage(ex.Message);  
            }  
        }  
        #endregion  
        #region show message  
        /// <summary>  
        /// This function is used for show message.  
        /// </summary>  
        /// <param name="msg"></param>  
        void ShowMessage(string msg)  
        {  
            ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script  
language='javascript'>alert('" + msg + "');</script>");  
        }  
        /// <summary>  
        /// This Function is used TextBox Empty.  
        /// </summary>  
        void clear()  
        {  
            txtName.Text = string.Empty; txtAddress.Text = string.Empty; txtMobile.Text = string.Empty;  
txtEmail.Text = string.Empty;  
            txtName.Focus();  
        }  
        #endregion  
        #region bind data to GridViewStudent  
        private void BindGridView()  
        {   
            Try  
            {  
                if (conn.State == ConnectionState.Closed)  
                {  
                    conn.Open();  
                }  
                MySqlCommand cmd = new MySqlCommand("Select * from Student ORDER BY SID DESC;",  
conn);  
                MySqlDataAdapter adp = new MySqlDataAdapter(cmd);  
                DataSet ds = new DataSet();  
                adp.Fill(ds);  
                GridViewStudent.DataSource = ds;  
                GridViewStudent.DataBind();  
                lbltotalcount.Text = GridViewStudent.Rows.Count.ToString();  
            }  
            catch (MySqlException ex)  
            {  
                ShowMessage(ex.Message);  
            }  
            Finally  
            {  
                if (conn.State == ConnectionState.Open)  
                {  
                   conn.Close();  
                }  
            }  
        }  
        #endregion  
        #region Insert Data  
        /// <summary>  
        /// this code used to Student Data insert in MYSQL Database  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        protected void btnSubmit_Click(object sender, EventArgs e)  
        {  
            Try  
            {  
                conn.Open();  
                MySqlCommand cmd = new MySqlCommand("Insert into student (Name,Address,Mobile,Email )  
values (@Name,@Address,@Mobile,@Email)", conn);  
                cmd.Parameters.AddWithValue("@Name",txtName.Text);  
                cmd.Parameters.AddWithValue("@Address", txtAddress.Text);  
                cmd.Parameters.AddWithValue("@Mobile",txtMobile.Text);  
                cmd.Parameters.AddWithValue("@Email",txtEmail.Text);  
                cmd.ExecuteNonQuery();                 
                cmd.Dispose();   
                ShowMessage("Registered successfully......!");               
                clear();  
                BindGridView();  
            }  
            catch (MySqlException ex)  
            {  
                ShowMessage(ex.Message);  
            }  
            Finally  
            {  
                conn.Close();  
            }  
        }  
          
        #endregion   
        #region SelectedIndexChanged  
        /// <summary>  
        /// this code used to GridViewRow SelectedIndexChanged value show textbox  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        protected void GridViewStudent_SelectedIndexChanged(object sender, EventArgs e)  
        {  
            GridViewRow row = GridViewStudent.SelectedRow;  
            lblSID.Text = row.Cells[2].Text;  
            txtName.Text = row.Cells[3].Text;  
            txtAddress.Text = row.Cells[4].Text;  
            txtEmail.Text = row.Cells[5].Text;  
            txtMobile.Text = row.Cells[6].Text;  
            btnSubmit.Visible = false;  
            btnUpdate.Visible = true;  
        }  
        #endregion  
        #region Delete Student Data  
        /// <summary>  
        /// This code used to GridViewStudent_RowDeleting Student Data Delete  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        protected void GridViewStudent_RowDeleting(object sender, GridViewDeleteEventArgs e)  
        {  
            Try  
            {  
                conn.Open();  
                int SID = Convert.ToInt32(GridViewStudent.DataKeys[e.RowIndex].Value);  
                MySqlCommand cmd = new MySqlCommand("Delete From student where SID='" + SID + "'",  
conn);  
                cmd.ExecuteNonQuery();  
                cmd.Dispose();  
                ShowMessage("Student Data Delete Successfully......!");  
                GridViewStudent.EditIndex = -1;  
                BindGridView();  
            }  
            catch (MySqlException ex)  
            {  
                ShowMessage(ex.Message);  
            }  
            Finally  
            {  
                conn.Close();  
            }  
        }  
        #endregion  
        #region student data update  
        /// <summary>  
        /// This code used to student data update  
        /// </summary>  
        /// <param name="sender"></param>  
       /// <param name="e"></param>  
        protected void btnUpdate_Click(object sender, EventArgs e)  
        {  
            Try  
            {  
                conn.Open();  
                string SID = lblSID.Text;                
                MySqlCommand cmd = new MySqlCommand("update student Set  
Name=@Name,Address=@Address,Mobile=@Mobile,Email=@Email where SID=@SID", conn);  
                cmd.Parameters.AddWithValue("@Name", txtName.Text);  
                cmd.Parameters.AddWithValue("@Address", txtAddress.Text);  
                cmd.Parameters.AddWithValue("@Mobile", txtMobile.Text);  
                cmd.Parameters.AddWithValue("@Email", txtEmail.Text);  
                cmd.Parameters.AddWithValue("SID",SID);  
                cmd.ExecuteNonQuery();  
                cmd.Dispose();  
                ShowMessage("Student Data update Successfully......!");  
                GridViewStudent.EditIndex = -1;  
                BindGridView(); btnUpdate.Visible = false;  
            }  
            catch (MySqlException ex)  
            {  
                ShowMessage(ex.Message);  
            }  
            Finally  
            {  
                conn.Close();  
            }  
        }  
        #endregion  
        #region textbox clear  
        protected void btnCancel_Click(object sender, EventArgs e)  
        {  
            clear();  
        }  
        #endregion  
    }  
}   

ページを実行すると、次のようになります。



次に、学生データの挿入とグリッドビューのデータの表示を入力します。メッセージボックス「正常に登録されました」。



次に、Studentを選択し、データTextBoxを表示して、メッセージボックス「StudentDataupdatesuccessfully」に表示されているデータを更新します。



ここで、メッセージボックス「StudentDataDeleteSuccessfully」に表示されているStudentデータを削除します。



この記事がお役に立てば幸いです。他にご不明な点がございましたら、以下にコメントをお寄せください。

リンク: https://www.c-sharpcorner.com/

#aspdotnet #sql 

藤本  結衣

藤本 結衣

1633175520

C#のTreeViewコントロール

TreeViewの紹介

これは、TreeViewコントロールの操作の基本のいくつかを取り上げた短い記事です。この記事では、TreeNodeをTreeViewコントロールに動的に追加し、ノードを検索して、TreeNodeのタグ、テキスト、または名前のプロパティに対して検索語に一致する単一のノードまたはノードのコレクションを見つけて強調表示し、手動またはプログラムでノードを選択する方法について説明します。

Image1.jpg

図1:TextプロパティによるTreeViewコントロールの検索。

Image2.jpg

図2:NameプロパティによるTreeViewコントロールの検索。

Image3.jpg

図3:NameプロパティによるTreeViewコントロールの検索。

Image4.jpg

図4:特定のプロパティを持つノードの作成。

TreeViewアプリケーション

アプリケーションソリューションには、単一のWindowsアプリケーションプロジェクトが含まれています。このプロジェクトをサポートするために提供されるすべてのコードは、2つのフォームクラスに含まれています。1つは、TreeViewと、ノード情報を表示し(図1、2、および3)、ユーザー指定の検索用語に基づいて特定のノードまたはノードのグループの検索を実行するために使用されるいくつかのコントロールを含むメインフォームです。もう1つのフォームクラス(図4)は、新しいノードを作成するために使用されます。アプリケーション内では、TreeViewからノードを選択し、コンテキストメニューから[ノードの追加]オプションを選択すると、このフォームが表示されます。

このアプリケーションのTreeView関連コンポーネントのいずれかで行われるカスタムまたは派手なことは何もありません。これは、Windowsフォームアプリケーションのコンテキスト内でTreeViewを操作する方法のデモンストレーションにすぎません。

コード:フォーム1-メインフォーム

メインフォームクラスは、いくつかのコントロールが追加された標準のウィンドウフォームです。フォームには分割コンテナコントロールが含まれています。コントロールの左側にはTreeViewコントロールがあり、スプリッターの右側には4つのグループボックスがあります。最初のグループボックスには、選択したノードに関する情報を表示するために使用されるラベルとテキストボックスのセットが含まれ、残りのグループボックスには、ノードのテキスト、名前に基づいてTreeViewのノードコレクションのさまざまな検索を実行するために使用されるラベル、テキストボックス、およびボタンが含まれます。 、またはタグ値。

クラスに含まれる機能は、いくつかの領域に分割されています。クラスは、デフォルトのインポート、名前空間宣言、およびクラス宣言で始まります。

 システムを使用する;  
 System.Collections.Genericを使用する;  
 System.ComponentModelを使用します。  
 System.Dataを使用します。  
 System.Drawingを使用する;  
 System.Textを使用します。  
 System.Windows.Formsを使用する;  
名前空間 EasyTreeView {  
    パブリック 部分 クラス Form1:フォーム{  
        public  Form1(){  
            InitializeComponent();  
            //ベースツリービューノードを追加することから始めます  
            TreeNode mainNode =  new  TreeNode();  
            mainNode.Name =  "mainNode" ;  
            mainNode.Text =  "Main" ;  
            this .treeView1.Nodes.Add(mainNode);  
        }  
    }  
}   

フォームクラスコンストラクターは、TreeViewコントロールにメインノードを作成します。実行時に、ユーザーはこのノード(またはこのノードから発生する任意の子ノード)を選択して、TreeViewにノードを追加できます。フォームクラスにはコンテキストメニューも含まれています。このコンテキストメニューには2つのオプションがあります。1つは新しいノードを追加するためのもので、もう1つは既存のノードを削除するためのものです。新しいノードが要求されると、アプリケーションは[新しいノード]ダイアログのインスタンスを開きます。このダイアログでは、ユーザーに新しいノードの名前、テキスト、およびタグの値を設定するように強制します。タグ値は任意のオブジェクトにすることができますが、この例では、タグは追加の文字列値を保持するように制限されています。ダイアログから値が収集されると、新しいノードに情報が入力され、TreeViewの選択されたノードに追加されます。

ノードが削除されると、選択されたノードとそのすべての子がTreeViewから削除されます。ここで注意すべきことの1つは、タグを介してオブジェクトをノードに関連付ける場合です。選択したノードを削除する前に、そのオブジェクトを破棄するハンドラーを作成する必要があります。

#regionノードの追加と削除  
/// <概要>  
    ///ダイアログボックスを使用してTreeviewノードを追加します  
    ///ユーザーに名前とテキストのプロパティを設定するように強制する  
    ///ノードの  
    /// </ summary>  
///  
<param name = "送信者" >  
</ param>  
///  
<param name = "e" >  
</ param>  
private void  cmnuAddNode_Click(object  sender、EventArgs e)   
{{  
    NewNode n =  new  NewNode();  
    n.ShowDialog();  
    TreeNode nod =  new  TreeNode();  
    nod.Name = n.NewNodeName.ToString();  
    nod.Text = n.NewNodeText.ToString();  
    nod.Tag = n.NewNodeTag.ToString();  
    n.Close();  
    treeView1.SelectedNode.Nodes.Add(nod);  
    treeView1.SelectedNode.ExpandAll();  
}  
/// <概要>  
    ///選択したノードとその子を削除します  
    /// </ summary>  
///  
<param name = "送信者" >  
</ param>  
///  
<param name = "e" >  
</ param>  
private void  cmnuRemoveNode_Click(object  sender、EventArgs e)   
{{  
    treeView1.SelectedNode.Remove();  
}  
#endregion  

コードの次の領域は、TreeViewイベントを処理するために使用されます。このセクションで処理されるイベントは2つだけです。TreeViewのAfterSelectイベントとTreeViewのclickイベント。After Selectイベントハンドラーは、選択したノードからの情報(名前、テキスト、タグ、および親テキストのプロパティ)を表示するために使用されるテキストボックスにデータを入力するために使用されます。後で説明する検索機能は、一致する各ノードの背景色を黄色に設定することにより、検索に応答して見つかったすべてのノードを強調表示します。TreeViewのクリックイベントハンドラーは、そのような強調表示をすべて削除するために使用されます。

#regionTreeviewイベントハンドラー  
/// <概要>  
///選択したノードに関する情報を表示します  
/// </ summary>  
/// <param name = "sender"> </ param>  
/// <param name = "e"> </ param>  
private void  treeView1_AfterSelect(object  sender、TreeViewEventArgs e)   
{{  
    試す  
    {{  
        txtName.Text =  "" ;  
        txtParentName.Text =  "" ;  
        txtText.Text =  "" ;  
        txtTag.Text =  "" ;  
        txtName.Text = treeView1.SelectedNode.Name.ToString();  
        txtText.Text = treeView1.SelectedNode.Text.ToString();  
        txtTag.Text = treeView1.SelectedNode.Tag.ToString();  
        txtParentName.Text = treeView1.SelectedNode.Parent.Text.ToString();  
    }  
    キャッチ {}  
}  
/// <概要>  
///検索関数でマークされたノードをクリアします  
/// </ summary>  
/// <param name = "sender"> </ param>  
/// <param name = "e"> </ param>  
private void  treeView1_Click(object  sender、EventArgs e)   
{{  
    ClearBackColor();  
}  
#endregion   

クラス内の次の領域は、nameプロパティでノードを検索するために使用されます。名前でノードを検索する方法は、TreeViewで直接サポートされている唯一の検索機能です。名前以外の名前でノードを検索する場合は、独自のメソッドを作成する必要があります。このクリックイベントハンドラーは、一致する名前でノードの配列にデータを入力します。findメソッドは2つの引数を受け入れます。最初の引数は検索語で、2番目の引数は子ノードも検索に含めるかどうかを決定するために使用されるブール値です。この場合、検索語はフォームのテキストボックスから収集され、子ノードを検索するオプションは、2番目の引数をtrueに設定することで有効になります。

ノードのコレクションが作成されると、一致する各ノードの背景色が黄色に設定され、TreeViewでノードが強調表示されます。一致するノードの背景色を設定する前に、Clear Back Colorメソッドを呼び出すことにより、TreeView内の他のすべてのノードが白い背景に戻されます。

#region名前で検索  
/// <概要>  
///ツリービューの組み込みの検索関数を使用します  
///ノードを検索する  
/// </ summary>  
/// <param name = "sender"> </ param>  
/// <param name = "e"> </ param>  
private void  btnFindNode_Click(object  sender、EventArgs e)   
{{  
    ClearBackColor();  
    試す  
    {{  
        TreeNode [] tn = treeView1.Nodes [0] .Nodes.Find(txtNodeSearch.Text、  true );  
        for  (int  i = 0; i <tn.Length; i ++)  
        {{  
            treeView1.SelectedNode = tn [i];  
            treeView1.SelectedNode.BackColor = Color.Yellow;  
        }  
    }  
    キャッチ {}  
}  
#endregion  

コードの次の領域は、以前の検索で強調表示されたノードから背景色を削除するために使用されます。このプロセスは、2つの別々の方法に依存しています。最初のメソッドは、フォームのTreeViewコントロール内のすべてのノードを含むツリーノードコレクションのインスタンスを作成します。コレクション内の各ノードは、2番目のメソッド(Clear Recursive)に渡されます。この2番目のメソッドには、現在のノードが渡されます。Clear Recursiveメソッドは、渡されたノードノードコレクション内に含まれるすべてのノードをループし、それらの各ノードの背景色を白に設定します。次に、各ノードは同じClear Recursiveメソッドに再帰的に戻され、処理するノードがなくなるまで、各ノードのノードコレクションが処理されます。このようにして、ツリー全体の各ノードと子ノードが処理されます。

このプロセスは、各ノードの背景色を白に設定するためだけに使用されますが、ツリー全体を処理する必要がある場合は常に同じアプローチを使用できます。実際、残りの検索方法はまさにそれを行います。

#regionBackColorを削除します  
//ツリービューノードを再帰的に移動します  
//そして背景色を白にリセットします  
private void  ClearBackColor()   
{{  
    TreeNodeCollectionノード= treeView1.Nodes;  
    foreachの (ツリーノードN における ノード)  
    {{  
        ClearRecursive(n);  
    }  
}  
// ClearBackColor関数によって呼び出されます  
private void  ClearRecursive(TreeNode treeNode)   
{{  
    foreachの (ツリーノードTN で treeNode.Nodes)  
    {{  
        tn.BackColor = Color.White;  
        ClearRecursive(tn);  
    }  
}  
#endregion   

コードの次の領域は、検索式に一致するテキストプロパティを持つ1つまたは複数のノードを見つけるために使用されます。フォームには、テキスト検索用語を設定し、ボタンクリックイベントハンドラーからメソッドを呼び出すために使用されるグループボックスが含まれています。ボタンをクリックすると、最初にClear Back Colorメソッドを呼び出して、強調表示されているすべてのノードがクリアされます。ノードがすべて白い背景に復元された後、ハンドラーはFind ByTextメソッドを呼び出します。この方法は、背景色をクリアするために説明した方法とほとんど同じように機能します。このメソッドは、ツリービューノードのコレクションをアセンブルしてから、各ノードを再帰メソッドに渡します。find recursiveメソッドは、検索式に一致するテキストプロパティを持つノードを検索し、一致するものが見つかると、背景色を黄色に設定します。

#regionテキストで検索  
/// <概要>  
///テキストによるノードの検索には特別な機能が必要です  
///この関数はツリービューを再帰的にスキャンし、  
///一致するアイテムをマークします。  
/// </ summary>  
/// <param name = "sender"> </ param>  
/// <param name = "e"> </ param>  
private void  btnNodeTextSearch_Click(object  sender、EventArgs e)   
{{  
    ClearBackColor();  
    FindByText();  
}  
private void  FindByText()   
{{  
    TreeNodeCollectionノード= treeView1.Nodes;  
    foreachの (ツリーノードN における ノード)  
    {{  
        FindRecursive(n);  
    }  
}  
private void  FindRecursive(TreeNode treeNode)   
{{  
    foreachの (ツリーノードTN で treeNode.Nodes)  
    {{  
        //テキストのプロパティが一致する場合は、アイテムに色を付けます  
        if  (tn.Text ==  this .txtNodeTextSearch.Text)  
            tn.BackColor = Color.Yellow;  
        FindRecursive(tn);  
    }  
}  
#endregion  

次の領域は、タグ値(この場合は文字列)によってノードを検索するために使用されるメソッドを含むために使用されます。一致するノードを黄色で強調表示します。これらのメソッドは、一致がテキスト値ではなくタグ値によって決定されることを除いて、最後のメソッドとほとんど同じように機能します。

#regionタグで検索  
/// <概要>  
///タグでノードを検索するには特別な機能が必要です  
///この関数はツリービューを再帰的にスキャンし、  
///一致するアイテムをマークします。タグはオブジェクトにすることができます。これで  
///文字列を含めるためだけに使用される場合  
/// </ summary>  
/// <param name = "sender"> </ param>  
/// <param name = "e"> </ param>  
private void  btnNodeTagSearch_Click(object  sender、EventArgs e)   
{{  
    ClearBackColor();  
    FindByTag();  
}  
private void  FindByTag()   
{{  
    TreeNodeCollectionノード= treeView1.Nodes;  
    foreachの (ツリーノードN における ノード)  
    {{  
        FindRecursiveTag(n);  
    }  
}  
private void  FindRecursiveTag(TreeNode treeNode)   
{{  
    foreachの (ツリーノードTN で treeNode.Nodes)  
    {{  
    //テキストのプロパティが一致する場合は、アイテムに色を付けます  
        if  (tn.Tag.ToString()==  this .txtTagSearch.Text)  
            tn.BackColor = Color.Yellow;  
        FindRecursiveTag(tn);  
    }  
}  
#endregion  

これで、ノードを追加および削除したり、名前、テキスト、またはタグの値に基づいて特定のノードを検索したりするために必要なすべてのコードがまとめられます。

コード:フォーム2-新しいノードフォーム

New Nodeフォームで提供されるコードは、新しく作成されたノードの名前、テキスト、およびタグのプロパティを設定するために使用されるユーザー指定の値をキャプチャするためにのみ使用されます。フォームはダイアログとして表示され、ユーザーがアプリケーションのメインフォームから新しいノードの追加を要求したことに応答して表示されます。インポート、名前空間宣言、およびクラス宣言はすべて、フォームクラスのデフォルト構成にあります。

 システムを使用する;  
 System.Collections.Genericを使用する;  
 System.ComponentModelを使用します。  
 System.Dataを使用します。  
 System.Drawingを使用する;  
 System.Textを使用します。  
 System.Windows.Formsを使用する;  
名前空間 EasyTreeView  
{{  
    パブリック 部分 クラス NewNode:フォーム  
    {{  

クラス宣言に続いて、3つのローカルメンバー変数が定義されます。それぞれが、ユーザー指定の名前、テキスト、およびタグのプロパティを格納するために使用されます。

#regionローカル変数  
プライベート文字列 mNewNodeName;   
プライベート文字列 mNewNodeText;   
プライベート文字列 mNewNodeTag;   
#endregion  

フォームコンストラクターはデフォルト構成です。

/// <概要>  
///デフォルトのコンストラクタ  
/// </ summary>  
public  NewNode()  
{{  
     InitializeComponent();  
}  

コードの次の領域は、新しいノード名、テキスト、およびタグ値を保持するために使用される3つのパブリックプロパティを定義するために使用されます。ユーザーがこのフォームにこれらの値を設定すると、メインフォームはこれらのプロパティを収集し、新しいノードの名前、テキスト、およびタグのプロパティに割り当てます。

#regionクラスのプロパティ  
パブリック文字列 NewNodeName {   
    取得 {  
         mNewNodeNameを返します。  
    }  
    セット {  
        mNewNodeName =値;  
    }  
}  
パブリック文字列 NewNodeText {   
    取得 {  
         mNewNodeTextを返します。  
    }  
    セット {  
        mNewNodeText =値;  
    }  
}  
パブリック文字列 NewNodeTag {   
    取得 {  
         mNewNodeTagを返します。  
    }  
    セット {  
        mNewNodeTag =値;  
    }  
}  
#endregion  

このボタンクリックイベントハンドラーは、ユーザーに3つの値すべてを設定するように強制することを目的としています。それぞれが設定されると、関連するプロパティに正しい値が渡され、フォームが閉じられます。

private void  btnSubmit_Click(object  sender、EventArgs e){   
    if  (txtNewNodeName.Text!=  string .Empty){  
        NewNodeName = txtNewNodeName.Text;  
    }   
    else  {  
        MessageBox.Show("ノードに名前を付けます。" );  
        戻る;  
    }  
    if  (txtNewNodeText.Text!=  string .Empty){  
        NewNodeText = txtNewNodeText.Text;  
    }   
    else  {  
        MessageBox.Show("新しいノードのテキストを提供する" );  
        戻る;  
    }  
    if  (txtTag.Text!=  string .Empty){  
        NewNodeTag = txtTag.Text;  
    }   
    else  {  
        MessageBox.Show("新しいノードのテキストを提供する" );  
        戻る;  
    }  
    this .Close();  
}  

これですべてです。このコードが実行されると、ユーザーはメインノードを右クリックして、適切と思われる数のノードと子ノードを追加できます。ユーザーは、有効な検索式を任意の検索オプションに入力して、一致するノードを強調表示するか、ツリーからノードを選択して、選択したノードから関連する名前、テキスト、タグ、および親の値を読み取ることができます。

  

概要

当然、TreeViewコントロールを使用する方法は無数にあり、この簡単なデモンストレーションでは、利用可能なさまざまなオプションの調査を開始していません。デモンストレーションの唯一の目的は、ノードを追加および削除する方法、選択したノードから情報を取得する方法、およびノー​​ドの名前、テキスト、およびタグ値に基づいて特定のノードを検索する方法の説明を提供することでした。

リンク:https://www.c-sharpcorner.com/

#csharp 

Flutter Package Credit Card Widget with Editable Properties

TNET Credit Card

This package consists in a credit card widget with editable properties.

Features

This package is only for a testing purpose. Credit card widget.

Getting started


dependencies:
  tnet_credit_card: ^0.1.1


import 'package:tnet_credit_card/tnet_credit_card.dart';

Usage


TNETCreditCard(
  uniqueColor: Colors.blueAccent,
),

TNETCreditCard(
  shadowGradient: Colors.white,
  firstGradientColor: Colors.blue,
  secondGradientColor: Colors.blueAccent,
  cardName: "Marco",
),

TNETCreditCard(
  shadowGradient: Colors.white,
  firstGradientColor: Colors.orange,
  secondGradientColor: Colors.orangeAccent,
  cardExpirationText: "05/28",
),

TNETCreditCard(
  shadowGradient: Colors.white,
  firstGradientColor: Colors.red,
  secondGradientColor: Colors.redAccent,
  cardNumber: "5634 3454 2432 2342",
),

TNETCreditCard(
  shadowGradient: Colors.white,
  firstGradientColor: Colors.black,
  secondGradientColor: Colors.black54,
  textExpirationColor: Colors.white,
  textInputsColor: Colors.amber,
),

Use this package as a library

Depend on it

Run this command:

With Flutter:

 $ flutter pub add tnet_credit_card

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  tnet_credit_card: ^0.1.1

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:tnet_credit_card/tnet_credit_card.dart'; 

example/lib/main.dart

/// #region Imports

import 'package:flutter/material.dart';
import 'package:tnet_credit_card/tnet_credit_card.dart';

/// #endregion

/// #region Main

void main() => runApp(const TNETCreditCardApp());

/// #endregion

/// #region Class [TNETCreditCardApp] extends [StatelessWidget]

class TNETCreditCardApp extends StatelessWidget {
  /// Constructor
  const TNETCreditCardApp({Key? key}) : super(key: key);

  /// This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      /// Application title
      title: 'TNET Credit Card',

      /// Changing theme data properties
      theme: ThemeData(
        /// Primary swatch color
        primarySwatch: Colors.blue,
      ),

      /// Page route
      home: const TNETCreditCardDemo(title: 'TNET Credit Card Demo'),
    );
  }
}

/// #endregion

/// #region Class [TNETCreditCardDemo] extends [StatefulWidget]

class TNETCreditCardDemo extends StatefulWidget {
  /// Construtor
  const TNETCreditCardDemo({Key? key, required this.title}) : super(key: key);

  /// Variable [title] type [String] used to set a title to the page
  final String title;

  @override
  State<TNETCreditCardDemo> createState() => _TNETCreditCardDemoState();
}

class _TNETCreditCardDemoState extends State<TNETCreditCardDemo> {
  /// Declaration of first image asset
  final Image firstLogo = Image.asset(
    "../assets/images/bpi_logo.png",
    width: 150,
  );

  /// Declaration of second image asset
  final Image secondLogo = Image.asset(
    "../assets/images/visa_logo.png",
    color: Colors.white,
    width: 60,
  );

  /// Widget building
  @override
  Widget build(BuildContext context) {
    /// Returns a Scaffold to build the page
    return Scaffold(
      appBar: AppBar(
        /// App bar with setted title above
        title: Text(widget.title),
      ),

      /// Creates a widget that centers its child
      body: Center(
        /// Creates a vertical array of children
        child: SingleChildScrollView(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              TNETCreditCard(
                firstLogo: firstLogo,
                secondLogo: secondLogo,
                uniqueColor: Colors.blueAccent,
              ),
              TNETCreditCard(
                firstLogo: firstLogo,
                secondLogo: secondLogo,
                shadowGradient: Colors.white,
                firstGradientColor: Colors.blue,
                secondGradientColor: Colors.blueAccent,
                cardName: "Marco",
              ),
              TNETCreditCard(
                firstLogo: firstLogo,
                secondLogo: secondLogo,
                shadowGradient: Colors.white,
                firstGradientColor: Colors.orange,
                secondGradientColor: Colors.orangeAccent,
                cardExpirationText: "05/28",
              ),
              TNETCreditCard(
                firstLogo: firstLogo,
                secondLogo: secondLogo,
                shadowGradient: Colors.white,
                firstGradientColor: Colors.red,
                secondGradientColor: Colors.redAccent,
                cardNumber: "5634 3454 2432 2342",
              ),
              TNETCreditCard(
                firstLogo: firstLogo,
                secondLogo: secondLogo,
                shadowGradient: Colors.white,
                firstGradientColor: Colors.black,
                secondGradientColor: Colors.black54,
                textExpirationColor: Colors.white,
                textInputsColor: Colors.amber,
              ),
              TNETCreditCard(
                firstLogo: firstLogo,
                secondLogo: secondLogo,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

/// #endregion 

Download Details:

Author: Marccarv

Source Code: https://github.com/Marccarv/tnet_credit_card

#flutter #android #ios 

White Label Studio Review & Bonuses

**WHITE LABEL STUDIO SOFTWARE REVIEW: YOUR OWN 100% DONE FOR YOU SOFTWARE BUSINESS
White Label Studio Software By Mario Brown & Med Amine

WHITE LABEL STUDIO WHAT IS IT With White Label Studio, you will get FOUR Battle Tested Software Solution WITH White Label and Resell Rights. You can access FOUR different apps, create accounts, manage clients and even upload their own logo and business name etc. The four apps are MyVirtualTours, VideozAgency, VideoMatic and Easy Banners Pro.

Software sells better than anything else and it’s very profitable, but it’s also very expensive to create and maintain. So why not leverage the same team, knowledge, and experience responsible for generating over 2 million a year in software sales. I’ve NEVER Done This Before For the FIRST TIME EVER they’re giving an opportunity to anyone who wants to start a 7-figure SaaS Business by giving away White Label Rights to FOUR next-gen software. Which means you can rebrand them, sell them and keep 100% of the profits (…And Just To Be Clear: This is NOT a Reseller Offer, you get Whitelabel Rights To ALL FOUR APPS… So they are yours to rebrand and sell as your own software)

You Get Complete Control & Power To: Re-Brand, Change Price, Change Subscription. 2021 Is The PERFECT Time To Start A New SaaS Business. In 2022, SaaS will generate close to $141 billion. By 2021, 73% of organizations will be using all or mostly SaaS solutions. Nearly 85% of small companies have already invested in SaaS options. Organizations with 250+ employees use more than 100 SaaS apps. Small firms of up to 50 employees use between 25-50 SaaS solutions, on average.

IF YOU WANT TO SEE MY VIDEO REVIEW ON YOUTUBE CHECK THE LINK BELOW :
CHANNEL - [“THE REVIEW CENTER”](https://youtu.be/ketbNQpGAfQ ““THE REVIEW CENTER””)

Imagine Starting A Successful SaaS Business With FOUR Incredible Video & Banner Apps… WITHOUT: Spending months on market research & analysis, Doing a full competition feature analysis, Running a price comparison with other products, Wasting time & resources on product creation, Hiring a team of coders, designers & copywriters, Incurring Overheads & other maintenance expenses, Hiring & training customer & technical support teams, Spending thousands of dollars on marketing, Being unsure of whether the product will even sell do none of this. They’ve Done All The Hard Work For You And they’ve Paid For Everything. Introducing White Label Studio.

With White Label Studio, you start Profiting In Just 3 Simple Steps:

**STEP 1: Get Access
STEP 2: Point-n-Click To Rebrand ALL FOUR Software As Your OWN
STEP 3: Sell & Pocket 100% Revenue.

And the best part? You can get access to all 4 video & banner apps for unlimited personal & professional use when you make ONE SINGLE TINY payment. Get It Now.

WHITE LABEL STUDIO FEATURES

INSTANT SALES: As soon as you get your hands on White Label Studio, you can kickstart your own agency. Not a moment of delay…you will have access to FOUR brilliant VIDEO & BANNER APPS that will sell like hot cakes. The best part about this deal is that you don’t have to waste time & money on any research & product creation…you get access to ready-to-sell apps that will give you an instant head-start.
MULTIPLY YOUR INCOME: Why sell only one or two videos & banners when you can sell as many as you like. In fact, why not sell the entire platform with 4 incredible video & banner apps for a big monthly fee? Possibilities are limitless when you leverage this marketing wonder! Multiply your income with each client you effortlessly get on board.
AUTOMATED WORK: Replace hard work with smart work. With White Label Studio, All you need to do is click a few buttons to customize done-for-you services on these incredible apps from one powerful dashboard. Access stunning DFY video templates that can be tweaked to your needs instantly. Effortlessly create sales videos, review videos, walkthrough videos, training videos, 360 videos, banner ads and any video format under the sun in a matter of minutes…
AGENCY DOMINATION: You’ve got everything you need to create a name for yourself right from the beginning. The most incredible apps that are professionally designed & guaranteed to convert well. Don’t just own an agency, own the entire video & banner marketing space with this platform that’ll put you right on top of the charts!
UNCONDITIONAL SUPPORT: White Label Studio team of experts are behind you 100%. Training, support, updates & tutorials are all included with your purchase. Get everything right & enjoy unconditional support to take the maximum advantage of the platform from day 1.
UNCUT PROFIT: There is no need to shell out your valuable profits, not even a single penny. As you get more and more clients with each passing day, this tiny investment will clearly appear as the wisest decision you’ve ever made. Make big money without any monthly fee, success tax or subscription amount.
LIMITLESS FLEXIBILITY: Enjoy flexibility at its best. Don’t be bound by restrictions & long wait times. Don’t waste time on juggling apps or creating videos & banners that take hours to render. This platform has been created to help you profit easily just the way you like it…
ABSOLUTE POWER & JOY: You don’t need to be an expert or have years of experience to enjoy absolute power and joy. You’ve got everything you need to live the life of great fulfillment and success. Skyrocketing sales & profits can become your instant reality without waiting around.

—:: Check out the White Label Studio to get the Bonuses ::—
WHAT WHITE LABEL STUDIO CAN DO FOR YOU

With White Label Studio, you’ll GET ACCESS to FOUR futuristic apps with whitelabel rights for the price of a single app
SELL all FOUR apps individually or as a full-blown package to pocket massive profits
OFFER access for a one-time price or a monthly recurring subscription to create a never-ending passive income
4X PROFITS with included Commercial License. Use all 4 apps for your own use as well as for clients
White Label Studio is 100% Newbie Friendly: Cloud based, no technical experience needed.
Step-by-step training + customer support for your customers included
If you want to see a video Review about this product , then check my video Review also

MY YOUTUBE REVIEW : [“THE REVIEW CENTRE”](https://youtu.be/ketbNQpGAfQ ““THE REVIEW CENTRE””)
If you liked My Youtube Video Review ,
please Suscribe to my channel for more Reviews

WHITE LABEL STUDIO FREQUENTLY ASKED QUESTIONS

How easy is it to ‘REBRAND’ the apps inside White Label Studio? A. It is point-n-click easy. White Label Studio is ridiculously simple to use and 100% beginner friendly. You can simply upload your logo and customize the colors & text using a few clicks of buttons. Age, skill and experience is no bar.
What if I don’t make any profits with White Label Studio? A. Every app inside White Label Studio is powered by next-gen technology. Videos & banners are 2 of the hottest services on the internet today. And selling these services or software that help you render these services is really really easy. However, if you are still unable to make profits using White Label Studio – you can always get a refund within 14 days of your purchase.
Is White Label Studio Windows and Mac compatible? A. It is hosted on reliable cloud servers. You can log on from any device of your choice with any operating software.
Do you charge any monthly fees? A. Not yet…but to support this incredible technology and your customers, after this limited period offer, they will be charging a monthly fee. Make sure you buy it at this incredibly low one-time price to save your precious money!
Will I get any training or support for my questions? A. Absolutely. Their team of experts are available to you & your customers 24X7 to answer any questions that you or your customers may have. Training videos are included within your purchase to make you a seasoned software seller within seconds.
Do I need to download & install White Label Studio somewhere? A. Never! You simply have to use the software from any browser. Nothing to download or install. They push automatic updates through the cloud to make your experience bigger and better. Should you need anything else, they are a message away!

—:: Check out the White Label Studio to get the Bonuses ::—

Link for Discounted Price + Bonuses : Click here

WHITE LABEL STUDIO PRICE

Front End – 4 Software Apps With Reseller & White Label

– First Time Ever Done On JVZoo
– FOUR PROVEN Software Apps WITH White Label Dashboard
– EACH App Has a Strong Agency & MMO Angle
– Insanely High Value Offer & Easy To Promote
– 4 Apps: MyVirtualTours, Video Matic, Videoz Agency, Easy Banners Pro
– Your Audience Can Upload Their Logo, Manage Clients etc.

Discounted Link : https://jvz7.com/c/2105669/368555

OTO 1: PRO – Get PRO Features For EACH App + Resell PRO Features
– Get Access To ALL PRO Features of ALL 4 Apps
– Use All The PRO Features For Your Business
– RESELL ALL PRO Features With This Upgrade – Sell PRO Version To Clients
– Insane Savings, Just One Time Investment Instead Of Paying For All 4 Apps Each
– PRO Version Includes Advanced Features, More Banners, More Virtual Tours etc.

Discounted Link : https://jvz8.com/c/2105669/368557

OTO 2: White Label Studio X
– ADVANCED White Label Features
– SMTP, Custom Upgrade URL, Custom Tutorial URL, Custom Support Link etc.
– Future White Label Features Included
– Future Software Updates Included
– Dedicated White Label Support
– 5 Team Member Access

Discounted Link : https://jvz8.com/c/2105669/368559

OTO 3: White Label Studio UNLIMITED
– Unlimited Client Accounts !!!
– Unlimited Animated Videos
– Unlimited 360 Virtual Tours
– Unlimited Interactive Videos
– Unlimited Banners
– Unlimited Email Contacts & Leads
– Unlimited Everything

Discounted Link : https://jvz8.com/c/2105669/368561

OTO 4: Marketing Pack – Done For You Resources To Sell Each App
– This Package Helps You Sell Your Agency Services & Each App
– Done For You Animated Sales Video
– Done For You Graphics
– Done For You Brochure
– Done For You PowerPoint/Keynote Presentation
– Done For You Sales Script
– And A Lot More

Discounted Link : https://jvz6.com/c/2105669/368563

All of them are Agency Apps so this is a FANTASTIC fit for the current Agency craziness but it also works GREAT for Video Marketers, Local Marketers, Coaches & Consultants, anyone wanting a SAAS Business and Biz Opportunity folks. Each app is updated & battle tested with hundreds of happy customers, JVZOO product of the day and incredible support.

All links in this sales funnel:
Front End 1 link (White Label Studio)
– White Label Studio link

OTO 1 link (White Label Studio Unlimited)
– White Label Studio Unlimited link

OTO 2 link (White Label Studio Pro)
– White Label Studio Pro link

OTO 3 link (White Label Studio Marketing Kit)
White Label Studio Marketing Kit link

OTO 4 link ( White Label Studio (Upgrade 4))
– White Label Studio (Upgrade 4) link

Thanks for your precious time, hope you liked the Review

--------------------------------x--------------------------------

#white label studio review #white label studio #white label studio bonuses #white label software #white label software reseller #white label studio discount