2015-01-02 4 views
0

У меня есть таблица, имеющий 2 колонки именно ID и DETAILS .DATA в таблице, как id=01 details="pritam=123 sourav=263 ", как этот я работаю над окнами для приложения ..when приложение будет запускать вывод, что я собираюсь рассказать .. 1. в моем приложении один combobox есть. Когда приложение запустится, все id будут связаны в выпадающем списке из таблицы. 2. Когда пользователь выберет любую id вдруг данные детали столбцов будут показаны в представлении Datagrid в расщепленным формате, как это.Удаление одного выбранной строки из представления сетки во время выполнения

NAME KEY 
PRITAM 123 
SOURAV 263 

в этом окне сетки данных пользователь может удалить строку ant, нажав кнопку и нажав кнопку ниже. вставьте любую строку, нажав кнопку добавления новой строки в конце, измените любые существующие данные и, наконец, нажмите кнопку обновления, и все данные будут сохранены в этой базе данных, как в предыдущем формате .. для этого я написал код в C#, как это ..

namespace windows_csharpp 
    { 
     public partial class Form5 : Form 
     { 
      SqlConnection cc = new SqlConnection("Integrated Security=true;database=EDIXfer"); 
     SqlDataAdapter da; 
     DataTable dt; 
     public Form5() 
     { 
      InitializeComponent(); 
     } 

     private void Form5_Load(object sender, EventArgs e) 
     { 
      string sql="select EDIScheduleID from ETAProcessSchedule"; 
      da= new SqlDataAdapter(sql, cc); 
      dt = new System.Data.DataTable(); 
      da.Fill(dt); 
      for (int x = 0; x < dt.Rows.Count; x++) 
      { 
       comboBox1.Items.Add(dt.Rows[x][0].ToString()); 
      } 
     } 

     ArrayList ls = new ArrayList(); 
     int ss = 0; 
     int ss1 = 0; 
     int ssp = 1; 

     private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 

      string sql = "select * from ETAProcessSchedule where EDIScheduleID='" + comboBox1.SelectedItem.ToString() + "'"; 
      SqlDataAdapter adp = new SqlDataAdapter(sql, cc); 
      DataTable dt = new System.Data.DataTable(); 

      adp.Fill(dt); 
      string stp = dt.Rows[0][21].ToString(); 
      string[] stp1 = stp.Split(' '); 
      List<Class1> lst = new List<Class1>(); 
      ls.Clear(); 
      for (int x = 0; x < stp1.Length; x++) 
      { 
       ls.Add(stp1[x].ToString()); 
      } 
      for (int x = 0; x < ls.Count; x++) 
      { 
       string ssttt = ls[x].ToString(); 
       string[] sssp = ssttt.Split('='); 


       for (int x1 = 1; x1 < sssp.Length; x1++) 
       { 
        ss = 0; 
        ss1 = ssp; 

        Class1 cs = new Class1() 
        { 
         Value = sssp[ss], Key= sssp[x1].ToString() 
        }; 


         lst.Add(cs); 

       } 

      } 


      dataGridView1.DataSource = lst; 

     } 

     private void Update_Click(object sender, EventArgs e) 
     { 
      string value = null; 
      string keys = null; 
      string query = null; 
      string str = null; 

      for (int i = 0; i < dataGridView1.Rows.Count; i++) 
      { 
       value = dataGridView1.Rows[i].Cells[0].Value.ToString(); 
       keys = dataGridView1.Rows[i].Cells[1].Value.ToString(); 

       string ss = value + '=' + keys; 
       str += ss + ' '; 
      } 
      query = "update ETAProcessSchedule set ProcParameters='"+str+"' where EDIScheduleID='"+comboBox1.SelectedItem.ToString()+"'"; 
      da = new SqlDataAdapter(query, cc); 
      dt = new DataTable(); 
      da.Fill(dt); 
      MessageBox.Show("Data Updated In Database Successfully"); 

     } 

и один файл класса также есть ..

class Class1 
      { 
      public string Value { get; set; } 
      public string Key { get; set; } 
      } 

любезно помочь мне в удалить выбранную строку, добавьте новую строку и обновить все данные в базе данных как в предыдущем формате ..

+1

Чувак, потеряйте замок. – Carpetsmoker

+0

Почему вы не удовлетворены своим приближением? – Fabio

ответ

0

На вашей форме данные привязки нагрузки: -

EDIT: -

private void Form5_Load(object sender, EventArgs e) 
    { 
        comboBox1.DataSource = loadddltable(); 
        comboBox1.DisplayMember = "Name"; 
        comboBox1.ValueMember = "ID"; 
    } 

public DataTable loadddl() 
     { 
      OleDbDataReader obj = null; 
      DataTable dt = new DataTable(); 
      try 
      { 
       obj_dbconnection.CommandText = "Select * from TableName"; 
       obj = obj_dbconnection.ExecuteReader(); 
       if (obj != null) 
       { 
        if (obj.HasRows) 
        { 
         dt.Load(obj); 
        } 
       } 

      } 
      catch (Exception) 
      { 

      } 

      finally 
      { 
       if (obj != null) 
       { 
        obj.Close(); 
        obj_dbconnection.Close(); 
       } 
      } 
      return dt; 
     } 

/*Code for Execute Reader*/ 
    public OleDbDataReader ExecuteReader() 
     { 
      OleDbDataReader dr = null; 
      try 
      { 
       Open(); 
       dr = cmd.ExecuteReader(); 
      } 
      catch(Exception) 
      { } 
      return dr; 
     } 

/*Code for binding grid data*/ 

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      dataGridView1.DataSource= getDataForSelectedId(comboBox1.SelectedValue); 
     } 

А затем вставлять, редактировать, удалять кнопки в качестве полей шаблона для DataGridView и использовать dataGridView1_CellClick событие для вставки редактировать удалить

+0

Я предполагаю, что ваш ответ для ASP.NET. Вопрос о 'Winforms' – Fabio

+0

@Fabio: Спасибо, что указал на мою ошибку. – Tejas

+0

@Fabio: Пожалуйста, просмотрите ответ и, если необходимо, ответьте на вопрос. – Tejas

1

Я думаю, что у вас уже есть рабочий подход.Если я понимаю правильно, вы нужны только две функции:
- Load Schedule детали в (паре один ключ-значение в строке) DataGridView
- Сохранить отредактированный/добавлены/удалены пары ключ-значение в базе данных

Обязательно следующие свойства DataGridView значение ИСТИНА:

this.YourDataGridView.AllowUserToAddRows = true; 
this.YourDataGridView.AllowUserToDeleteRows = true; 

И конечно столбцов должны быть доступны для редактирования

в методах использовали const переменные, которые были созданы в вашей форме (F orm1)

private const string DETAILSDELIMITER = ' '; 
private const string NAMEKEYDELIMITER = '='; 

Метод деталей график загрузки в методе DataGridView

//Use SqlParameters in the query, 
    //if not your application vulnerable for sql injection 
    private void LoadScheduleDetails(string scheduleID) 
    { 
     //You working only with one column, do not use '*' in SELECT statement if not nessesary 
     string query = "SELECT EDIScheduleID, ProcParameters FROM ETAProcessSchedule WHERE EDIScheduleID = @ScheduleID"; 
     DataTable details = new DataTable(); 
     //Get data from database 
     using (SqlConnection yourConnection = new SqlConnection(_YourConnectionString)) 
     { 
      using(SqlCommand detailsCommand = new SqlCommand(query, yourConnection)) 
      { 
       //Adding parameter 
       SqlParameter id = new SqlParameter { ParameterName = "@ScheduleID", SqlDbType = SqlDbType.NVarChar, Value = scheduleID }; 
       detailsCommand.Parameters.Add(id); 
       using (SqlDataAdapter yourAdapter = new SqlDataAdapter(detailsCommand)) 
       { 
        yourAdapter.Fill(details); 
       } 
      } 
     } 
     this.YourDataGridView.Rows.Clear(); 
     if (details.Rows.Count > 0) 
     { 
      DataRow temp = details.Rows[0]; 
      //get column by name. 
      string[] pairs = temp.Field<String>("ProcParameters").Split(Form1.DETAILSDELIMITER); 
      //Adding rows manually without DataSource 
      foreach(string pair in pairs) 
      { 
       this.YourDataGridView.Rows.Add(pair.Split(Form1.NAMEKEYDELIMITER)); 
      } 
     } 
    } 

для сохранения данных
Я думаю, что лучше, если вы создаете столбцы уже в конструкторе
Затем вы можете получить доступ к столбцам это без индексов жесткого кодирования

private void SaveDetails(string scheduleID) 
    { 
     StringBuilder details = new StringBuilder(); 
     foreach(DataGridViewRow dgvr in this.YourDataGridView.Rows) 
     { 
      string name = dgvr.Cells[this.dgvColumn_Name.Name].Value.ToString(); 
      string key = dgvr.Cells[this.dgvColumn_Key.Name].Value.ToString(); 
      //Here you can check if values are ok(not empty or something else) 
      //Create pair 
      details.Append(Form1.DETAILSDELIMITER); 
      details.Append(name); 
      details.Append(Form1.NAMEKEYDELIMITER); 
      details.Append(key); 
     } 
     //remove first space character 
     if (details.Length > 0) 
      details.Remove(0, 1); 
     //Save data to database 
     string query = "UPDATE ETAProcessSchedule SET [email protected] WHERE [email protected]"; 
     using (SqlConnection yourConnection = new SqlConnection(_YourConnectionString)) 
     { 
      using (SqlCommand saveCommand = new SqlCommand(query, yourConnection)) 
      { 
       //Adding parameters 
       SqlParameter id = new SqlParameter { ParameterName = "@ScheduleID", SqlDbType = SqlDbType.NVarChar, Value = scheduleID }; 
       SqlParameter procParams = new SqlParameter { ParameterName = "@Details", SqlDbType = SqlDbType.NVarChar, Value = details.ToString() }; 
       saveCommand.Parameters.Add(id); 
       saveCommand.Parameters.Add(procParams); 
       saveCommand.ExecuteNonQuery(); 
       MessageBox.Show("Data Updated In Database Successfully"); 
      } 
     } 
    } 

Затем используйте LoadScheduleDetails в comboBox1_SelectedIndexChanged EventHandler

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string scheduleID = comboBox1.SelectedItem.ToString(); 
    if(String.IsNullOrEmpty(scheduleID) == false) 
    { 
     this.LoadScheduleDetails(scheduleID); 
    } 
} 

После загрузки данных, пользователь может изменить его, добавить строки, удалять строки
Когда пользователь нажимает кнопку «Обновить», а затем использовать SaveDetails метод,
, где мы собираем данные из всех строк и обновить базу данных вместе с ним

private void Update_Click(object sender, EventArgs e) 
{ 
    string scheduleID = comboBox1.SelectedItem.ToString(); 
    if(String.IsNullOrEmpty(scheduleID) == false) 
    { 
     this.SaveDetails(scheduleID); 
    } 
} 
+0

Правильный ответ. + 1 для использования пар ключей, которые заданы под вопросом. – Tejas

Смежные вопросы