2012-10-20 34 views
3

存儲過程有問題。在C#datagridview而不是列表框中存儲過程

此代碼(與ListBox

private void button4_Click(object sender, EventArgs e) 
{ 
    string connectionString = ConfigurationManager.ConnectionStrings["connString"].ConnectionString; 
    SqlConnection connection = new SqlConnection(connectionString); 

    string sqlCmd = "Drie duurste producten"; 

    SqlCommand cmd = new SqlCommand(sqlCmd, connection); 

    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.CommandText = sqlCmd; 

    connection.Open(); 

    using (SqlDataReader reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      listBox1.Items.Add(reader.GetValue(0).ToString()); 
     } 
    } 

    connection.Close(); 
} 

但我怎麼可以將此數據添加到DataGridView而不是ListBox

謝謝!

回答

3

更改爲

...... 
    using (SqlDataAdapter adapter = new SqlDataAdapter()) 
    { 
     DataTable dt = new DataTable(); 
     adapter.SelectCommand = cmd;   { 
     adapter.Fill(dt); 
     dataGridView1.DataSource = dt; 
    }  
    ...... 

通常一個DataGridView填充一個完整的數據源綁定到它的DataSource屬性,並讓控制弄清楚如何配置它的列和值的格式顯示

0

您需要使用SqlDataAdapter來獲取數據表中存儲過程的結果。

SqlDataAdapter da = new SqlDataAdapter(); 
da.SelectCommand = cmd;  
da.Fill(dt); 
dataGridView1.DataSource = dt; 
0

爲此,您不需要CommandReader,您只需使用DataAdapterDataSet即可。與數據集綁定到你的DataGridView

DataSet ds = new DataSet(); 

using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) 
{ 
    adapter.Fill(ds); 
    dataGridView1.DataSource = ds.Tables[0]; 
} 
0

你可以用數據表或數據集做它來填充數據....在這裏我做了DataTable中....

Datatable data = new Datatable(); 
using (SqlDataAdapter adp = new SqlDataAdapter()) 
{ 
    adp.SelectCommand = cmd; 
    adp.Fill(data); 
    GridView1.DataSorce = data; 
    GridView1.DataBind();  <--- Needed to bind GridView at a time While Filling DataTable data 
} 

你也可以檢查,如果DataTable包含數據或不通過這種方式Gridview1分配的DataTable之前.......

if(data.Rows.Counnt > 0) 
{ 
     GridView1.DataSorce = data; 
     GridView1.DataBind();  
} 
1

SqlDataAdapter的是做到這一點的最簡單方法。

但它也可以創建數據表和手動填充它,DataGridView中的數據源值賦給DataTable實例:

 ... 

     DataTable dt = new DataTable("test"); 
     dt.Columns.Add("test"); 

     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       DataRow dr = dt.NewRow(); 
       dr[0] = reader.GetValue(0).ToString(); 
       dt.Rows.Add(dr); 
      } 
     } 

     dataGridView1.DataSource = dt; 

     .... 
1
static public long Insert(BillAO ao) 
    { 
     try 
     { 
      SqlParameter[] Params = 
      { 
       new SqlParameter("@Status",ao.Status) 
       , new SqlParameter("@BAID",ao.BAID) 
       , new SqlParameter("@PhieuKhamID",ao.PhieuKhamID) 
       , new SqlParameter("@ThuNganID",ao.ThuNganID) 
       , new SqlParameter("@Ngay",ao.Ngay) 
       , new SqlParameter("@SoTien",ao.SoTien) 
       , new SqlParameter("@LyDo",ao.LyDo) 
       , new SqlParameter("@GhiChu",ao.GhiChu) 
       , new SqlParameter("@CreatedBy",ao.CreatedBy) 
       , new SqlParameter("@CreatedTime",ao.CreatedTime) 
       , new SqlParameter("@LastModifiedBy",ao.LastModifiedBy) 
       , new SqlParameter("@LastModifiedTime",ao.LastModifiedTime) 
      }; 
      int result = int.Parse(SqlHelper.ExecuteScalar(HYPO.Utils.Config.ConnString, CommandType.StoredProcedure, "SP_Bill_Insert", Params).ToString()); 
      return result; 
     } 
     catch (Exception ex) 
     { 
      if (ex.Message.Contains("duplicate")) 
      { 
       return -2; 
      } 
      return -1; 
     } 
    } 
0
public void whateverToolStripMenuItem_Click(object sender, EventArgs e) { 
// A previously declared and instantiated OpenFileDialog, i put it from Design Mode, but you can just 
// declare it as 
OpenFileDialog dlgImport = new OpenFileDialog(); 
//We show the dialog: 
dlgImport.ShowDialog(); 
// We declare a variable to store the file path and name: 
string fileName = dlgImport.FileName; 
try { 
    // We invoke our method, wich is created in the following section, and pass it two parameters 
    // The file name and .... a DataGridView name that we put is the Form, so we can also see what 
    // We imported. Cool, isn't it? 
    importExcel(fileName, gridMain); 
} 
// It is best to always try to handle errors, you will se later why it is OleDbException and not 
catch (OleDbException ex) { 
    MessageBox.Show("Error ocurred: " + ex.Message); 
} 

}

+0

請重新格式化你的答案。 。 –

相關問題