2016-10-11 16 views
0

사람이 내가 다음 코드 DataBoundItem에 대한 null 값을 받고 있어요 이유를 설명 좀 도와 수 :C# DataGridView에는 바인딩

당신은 캐스팅 할 필요가
public partial class ucInstanceSearch : UserControl 
{ 
    private IStorage tempStorage; 
    private BindingList<IInstance> instanceData; 

    public ucInstanceSearch(IStorage new_Storage) 
    { 
     InitializeComponent(); 

     this.tempStorage = new_Storage; 

     instanceData = new BindingList<IInstance>(tempStorage.Instance); 

     InitalizeInstanceTable(); 
    } 

    private void InitalizeInstanceTable() 
    { 
     dgInstanceTable.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 
     dgInstanceTable.MultiSelect = false; 
     dgInstanceTable.AutoGenerateColumns = false; 
     dgInstanceTable.RowHeadersVisible = false; 

     dgInstanceTable.DataSource = instanceData; 
    } 

    private void PopulateInstanceTable(String searchFilter) 
    { 
     dgInstanceTable.Update(); 
    } 

    private void dgInstanceTable_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 

    } 

    private void btnSearch_Click(object sender, EventArgs e) 
    { 
     if (txtSearch.Text != "") 
     { 
      PopulateInstanceTable(txtSearch.Text); 
     } 
     else 
     { 
      MessageBox.Show("Enter Data"); 
     } 
    } 

    private void btnSelect_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show(dgInstanceTable.SelectedRows[0].Cells[2].Value + string.Empty); 

     DataRow row = (dgInstanceTable.SelectedRows[0].DataBoundItem as DataRowView).Row; 
     IInstance selected = (IInstance)row; 


     textBox1.Text = selected.URL; 
    } 

    private void ucInstanceSearch_Load(object sender, EventArgs e) 
    { 

    } 


} 

답변

1

당신의 DataBoundItem하지 DataRowViewIInstance를 입력합니다.

'as'opeartor는 유형 변환에 실패하면 null을 반환합니다. 실수로 실수를하면 코드가 실패 할 것으로 기대하는 유형으로 직접 변환하는 것이 더 안전합니다.

0

스크립트에 데이터 소스가 없습니다. 이거해볼 수 있니?

SQL 서버 :

using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Windows.Forms; 

namespace WindowsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     string connetionString; 
     SqlConnection connection; 
     SqlDataAdapter adapter; 
     SqlCommandBuilder cmdBuilder; 
     DataSet ds = new DataSet(); 
     DataSet changes; 
     string Sql; 
     Int32 i; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password"; 
      connection = new SqlConnection(connetionString); 
      Sql = "select * from Product"; 
      try 
      { 
       connection.Open(); 
       adapter = new SqlDataAdapter(Sql, connection); 
       adapter.Fill(ds); 
       connection.Close(); 
       dataGridView1.DataSource = ds.Tables[0]; 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show (ex.ToString()); 
      } 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       cmdBuilder = new SqlCommandBuilder(adapter); 
       changes = ds.GetChanges(); 
       if (changes != null) 
       { 
        adapter.Update(changes); 
       } 
       MessageBox.Show("Changes Done"); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.ToString()); 
      } 
     } 
    } 
} 

MS 액세스 :

using System; 
using System.Data; 
using System.Data.OleDb; 
using System.Windows.Forms; 

namespace WindowsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     string connetionString; 
     OleDbConnection connection; 
     OleDbDataAdapter oledbAdapter; 
     OleDbCommandBuilder oledbCmdBuilder; 
     DataSet ds = new DataSet(); 
     DataSet changes; 
     int i; 
     string Sql; 


     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Your mdb filename;"; 
      connection = new OleDbConnection(connetionString); 
      Sql = "select * from tblUsers"; 
      try 
      { 
       connection.Open(); 
       oledbAdapter = new OleDbDataAdapter(Sql, connection); 
       oledbAdapter.Fill(ds); 
       dataGridView1.DataSource = ds.Tables[0]; 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show (ex.ToString()); 
      } 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       oledbCmdBuilder = new OleDbCommandBuilder(oledbAdapter); 
       changes = ds.GetChanges(); 
       if (changes != null) 
       { 
        oledbAdapter.Update(ds.Tables[0]); 
       } 
       ds.AcceptChanges(); 
       MessageBox.Show("Save changes"); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.ToString()); 
      } 
     } 
    } 
}