[英]Data Binding Cells Of DataGridView
我有一個 function 數據綁定作為參數傳遞的DataGridViewRow
的單元格之一。
public static void DataBindCells(DataGridViewRow row)
{
DataGridViewComboBoxCell priceModes = row.Cells["ColumnPriceMode"] as DataGridViewComboBoxCell;
priceModes.DataSource = UtilityClass.GetDataTable("SELECT PriceModeID,PriceModeName FROM PriceModes");
priceModes.DisplayMember = "PriceModeName";
priceModes.ValueMember = "PriceModeID";
}
此 function 的使用:有一個“添加行”按鈕調用DataBindCells
function。 使用這個 function 的DataGridView
實際上是用來填寫發票的。 行的列是:ItemName、PriceMode、Price、Quantity、Amount。
價格模式為 Piece/kg/Dozen 等。當用戶想要在賬單中添加項目時,單擊 Add Row 按鈕。
問題是當上面的 function 執行時,在DataGridViewComboBoxCell
中沒有選擇任何內容。 有什么方法可以默認選擇第一個項目。
下面的例子證明 DefaultValuesNeeded 可以做你想做的事。
...
命名空間 WindowsFormsApplication1 {
public static class Helper {
public static DataTable ToDataTable<T>(this List<T> list) where T : class {
Type type = typeof ( T );
var ps = type.GetProperties ( );
var cols = from p in ps
select new DataColumn ( p.Name , p.PropertyType );
DataTable dt = new DataTable ( );
dt.Columns.AddRange ( cols.ToArray ( ) );
list.ForEach ( (l) => {
List<object> objs = new List<object> ( );
objs.AddRange ( ps.Select ( p => p.GetValue ( l , null ) ) );
dt.Rows.Add ( objs.ToArray ( ) );
} );
return dt;
}
}
public enum SendTypes {
WeiBo ,
QQ ,
MSN ,
EML
}
public class Receiver {
public string Address {
get;
set;
}
public SendTypes SendType {
get;
set;
}
public string Msg {
get;
set;
}
}
public partial class Form1 : Form {
public Form1() {
InitializeComponent ( );
}
private void SetDataGrid() {
DataGridViewComboBoxColumn colSendType = new DataGridViewComboBoxColumn ( );
colSendType.Items.AddRange ( SendTypes.EML, SendTypes.MSN, SendTypes.QQ, SendTypes.WeiBo );
colSendType.Name = "SendType";
colSendType.DataPropertyName = "SendType";
this.dataGridView1.Columns.Add ( colSendType );
DataGridViewTextBoxColumn colAddress = new DataGridViewTextBoxColumn ( );
colAddress.Name = "Address";
colAddress.DataPropertyName = "Address";
this.dataGridView1.Columns.Add ( colAddress );
this.dataGridView1.AutoGenerateColumns = false;
//this.dataGridView1.AllowUserToAddRows = true;
}
private void LoadData() {
var tmp = new Receiver {
Address = "http://www.weibo.com/?uid=1000",
SendType = SendTypes.WeiBo,
Msg = "Test"
};
List<Receiver> datas = new List<Receiver>();
datas.Add(new Receiver {
Address = "http://www.weibo.com/?uid=1000",
SendType = SendTypes.WeiBo,
Msg = "Test"
});
datas.Add(new Receiver(){
Address = "10001",
SendType = SendTypes.QQ,
Msg = "test"
});
datas.Add(new Receiver(){
Address = "xling@abc.com",
SendType = SendTypes.EML,
Msg = "TEST TEST"
});
this.dataGridView1.DataSource = datas;//.ToDataTable();
}
private void Form1_Load(object sender , EventArgs e) {
this.SetDataGrid ( );
this.LoadData ( );
}
private void dataGridView1_DefaultValuesNeeded(object sender , DataGridViewRowEventArgs e) {
dataGridView1.Rows[e.Row.Index].Cells["SendType"].Value = SendTypes.EML;
}
}
}
DefaultValuesNeeded
單元格[2] 是 DataGridViewComboBoxColumn
private void dataGridView1_DefaultValuesNeeded(object sender , DataGridViewRowEventArgs e) {
dataGridView1.Rows[e.Row.Index].Cells[2].Value = "EML";
}
在完全綁定 GridView 后添加選擇標准(您要選擇哪一行)。 一旦你控制並開始動態綁定,自動魔法的東西就會飛出 window。
你想在這里完成什么? 我想有一種更簡單的方法可以做到這一點,它更符合標准綁定 model 和事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.