2011-08-30 32 views
0

我已經廣泛地將.Net框架用於後端進程和網頁,但我從未需要使用Windows窗體。我有一個Windows窗體技術類型唯一的經驗是用Delphi 6 & 7.如何使用Windows窗體在數據庫上執行基本的CRUD?

...我已經尋找教程,因爲他們似乎是我所期待的太簡單了。或者它似乎不適合我正在嘗試做的事情。

我想在窗體上顯示一個網格顯示(爲此,我一直使用DataGridView)(這是我設法做的),以便用戶可以查看,過濾和搜索數據。其他的東西如分頁也會涉及到,但我認爲我可以爲自己制定如何做到這一點。

我遇到的所有示例都使用DataGridView進行編輯,添加和刪除。我不太滿意用戶使用網格來表達一切的想法。這看起來很混亂,可能很容易出錯。

我想要有按鈕來添加,編輯和刪除各種類型的數據。例如,如果我有一個表單來管理客戶,我希望能夠選擇要編輯的行並單擊按鈕。這應該會打開一個新的窗體,其中包含所有預裝在文本框,單選按鈕,複選框和下拉列表中的數據。

如果他們單擊添加,它們將與編輯一起進入同一屏幕,除非所有信息都將爲空。如果他們選擇一行並單擊刪除,則會刪除該客戶並將其從DataGridView中刪除。

對於一些控件和數據綁定選項,我嘗試過從表中取出所有行。我將如何才能從數據庫中獲取我感興趣的行。我不確定這裏有什麼最佳實踐。

我現在受到信息過載的困擾,只會感激有人指着我朝着正確的方向發展。

編輯:

我要指出,從我的德爾福天,我期待能夠建立類似的查詢或SqlCommand時(拖動並在GUI上滴),並設置其SQL屬性,也許參數化SQL一點點。在窗體上拖放數據源。將數據源指向SqlQuery/SqlCommand並單擊該命令上的激活。現在,我可以將組件拖放到窗體上,並設置它們的數據源屬性以及它們引用的字段。

回答

1

你可以在很多方面做到這一點。還有一些框架可以提供幫助。實體框架,NHiberbnate。

但在較低的級別,您可以使用數據庫相關的對象。 SqlConnection,SqlCommand,DataReader。下面是加載一個行的SQL-Server相關示例。使用

private IList<IPosition> PositionsLoad(SqlConnection connection, PositionsRequest request) 
{ 

    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = connection; 
    cmd.CommandText = "select * from mytable WHERE x "; 
    cmd.CommandType = CommandType.Text; 

    //Get the reader 
    SqlDataReader reader = cmd.ExecuteReader; 
    IList<IPosition> ret = new List<IPosition>(); 

    if (reader.HasRows()) { 
     //Create our converter to convert DataReader into a business object/s 
     DataReaderToPosition readerConvert = new DataReaderToPosition(); 
     //loop rows 
     while (reader.Read) { 
      IPosition pos = readerConvert.DataReaderToBusinessObject(reader); 
      ret.Add(pos); 
     } 
    } 

    reader.Close(); 
    return ret; 

} 

DataReader的:

Public Overrides Function DataReaderToBusinessObject(ByVal reader As System.Data.IDataReader) As IPosition 

    Dim res As IPosition = New Position 

    res.ItemDate = reader.GetDateTime(reader.GetOrdinal("Date")) 
    res.Strategy = reader.GetString(reader.GetOrdinal("Strategy")) 
    res.SubStrategy = reader.GetString(reader.GetOrdinal("SubStrategy")) 
    res.BrokerPrime = reader.GetString(reader.GetOrdinal("BrokerPrime")) 
    res.BrokerExecuting = reader.GetString(reader.GetOrdinal("BrokerExecuting")) 
    res.AccountName = reader.GetString(reader.GetOrdinal("AccountName")) 
    res.ExpectedLoss = reader.GetDouble(reader.GetOrdinal("Expected_Loss")) 
    res.RiskNotional = reader.GetDouble(reader.GetOrdinal("Risk_Notional")) 
    res.ModelDelta = reader.GetDouble(reader.GetOrdinal("Model_Delta")) 
    res.ExpectedTrancheLoss = reader.GetDouble(reader.GetOrdinal("Expected_Tranche_Loss")) 
    res.BaseCorrelation = reader.GetDouble(reader.GetOrdinal("Base_Correlation")) 
    res.LossOnSingleNameDefault = reader.GetDouble(reader.GetOrdinal("Loss_on_Single_Name_Default")) 
    res.RiskCapitalAllocation = reader.GetDouble(reader.GetOrdinal("Risk_Capital_Allocation")) 
    res.MarginFundingAllocation = reader.GetDouble(reader.GetOrdinal("Margin_Funding_Allocation")) 
    res.DataSource = reader.GetString(reader.GetOrdinal("DataSource")) 

    Return res 
End Function 
2

看看this sample。它顯示了基本的ADO.NET綁定到WinForm控件(而不僅僅是DataGridView)。

+0

IPosition和PositionRequest和PositionsLoad需要使用哪些語句 – shenk

相關問題