當前位置:首頁 » 數據倉庫 » wpf資料庫綁定
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

wpf資料庫綁定

發布時間: 2022-12-18 05:01:36

⑴ WPF數據綁定問題(很菜的)

如果這個實體會被別的訪問者改變,並且需要通知UI,或者UI數據改變後需要通知實體的話就需要實現INotifyPropertyChanged介面,如果實體從資料庫查詢出來後,界面只是展示數據,這就不需要了。ObservableCollection<T>是實現了INotifyPropertyChanged的集合,建議你看看msdn上的說明。另外如果需要實現的話建議你當前的架構使用MVVM模式。

⑵ Wpf的comboBox怎麼綁定數據

WPF中提供了數據綁定的功能,操作起來很方便,集合類的控制項幾乎都可以用數據源來進行數據的綁定,下面操作一下下拉列表框控制項ComboBox控制項的數據綁定操作。
要綁定到ComboBox控制項的自定義類:
public class LocationRoad
{
public int ID { set; get; }
public string Code { set; get; }
public string Info { set; get; }
}
建立數據源,就將此數據集合當作數據源綁定到ComboBox:
///
/// 當ComboBox選中項更改時發生
///
private LocationRoad _selectLocation;
public LocationRoad SelectLocation
{
get
{
return this._selectLocation;
}
set
{
this._selectLocation = value;
if (this.PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("SelectLocation"));
}
}

private ObservableCollection _locationRoad = null;

public ObservableCollection LocationSource
{
get
{
if (this._locationRoad == null)
{
this._locationRoad = new ObservableCollection() {
new LocationRoad() { ID = 1, Code = "NGQ", Info = "南崗區" },
new LocationRoad() { ID = 2, Code = "DLQ", Info = "道里區" },
new LocationRoad() { ID = 3, Code = "DWQ", Info = "道外區" },
new LocationRoad() { ID = 4, Code = "PFQ", Info = "平房區" },
new LocationRoad() { ID = 5, Code = "XFQ", Info = "香坊區" },
};

}
return this._locationRoad;
}
set
{
this._locationRoad = value;
if (this.PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("LocationSource"));
}
}

⑶ wpf數據綁定source和elementname的區別

在WPF的數據綁定中:

  • Source 用於指定數據源為後台數據對象、集合

  • ElementName 用於指定「數據源」為界面上某個控制項的某個屬性


例如,以下xaml中

<TextBoxx:Name="txtName"/>
<TextBlockText="{BindingElementName=txtName,Path=Text}"/>

通過ElementName,TextBlock的Text屬性被綁定另一個名為txtName控制項上的Text屬性上(由Path指定)

⑷ wpf綁定顯示兩位小數

關於c#:在WPF綁定中設置小數屬性的默認值

c#mvvmwpf
Setting the Default Value for Decimal Property in WPF Binding
我將WPF表單綁定到類的Decimal屬性。 如果用戶輸入無效的格式(字元串而不是十進制),則文本框會自動以紅色顯示。 但是,我想通過在將插入的數據存儲到資料庫之前進行驗證來使其更加安全。

問題是,每當用戶輸入非十進制值時,綁定將返回0,而不是null或error。 因此,它無需第二級驗證就可以進入資料庫。

驗證WPF與小數的綁定的最佳方法是什麼? 現在它不會返回null,所以我沒有任何辦法捕獲錯誤。

這是我綁定文本框的方式

1
        <TextBox x:Name="stockTxtBx" Grid.Row="3" Grid.Column="1"  Style="{StaticResource StandardBox}" Text="{Binding StockOnHand}"/>
另外,在哪裡可以修改以添加驗證?

相關討論
我確定此頁面會為您提供幫助
@HaikalNashiha也許谷歌翻譯
@HaikalNashiha此頁面也很適合您
The problem is, whenever a user enter a non decimal value, the binding will return 0 instead of null or error

您在上述聲明中略有錯誤。當用戶輸入某些文本的特定欄位的類型無效時,實際發生的情況是:

無效的文本會導致TextBox周圍出現紅色邊框(或其他修飾,具體取決於ErrorTemplate值)。
數據綁定屬性值保留為最後輸入的有效值
因此,在您的情況下,最後一個有效值可能是0,這就是為什麼您認為無效值將始終返回0的原因。因此,實際上,只有無效值被忽略,而最後一個有效值仍然保留。

但是,要解決此問題,您有幾種選擇。一種方法是在保存數據之前檢查Validation.HasError附加屬性的值。顯然,如果您檢測到存在任何錯誤,那麼您將彈出一條消息來提醒用戶,而不是繼續保存。您可以從MVVM問題中的Binding Validation.HasError屬性中找到有關此方法的更多信息。

另一個選擇是限制特定TextBox的文本輸入,這樣就不可能輸入非數字鍵。在這里,我不會再詳細說明如何執行此操作,而是希望您在Stack Overflow上要求您查看

⑸ wpf中如何將datagrid控制項綁定到資料庫

給你找了個例子,是直接綁定到資料庫里的table的
後台代碼:
MKP.MyCommon.sqlHelper sh = new MKP.MyCommon.SQLHelper(null);
DataTable dt=sh.GetDataTable("select Fi_id,Fs_pCompanyName,Fs_phone,Fs_email from TpmCompany");
dataGrid1.ItemsSource = dt.DefaultView;
前台代碼:
<pre class="csharp" name="code"><DataGrid AutoGenerateColumns="False"
Height="153" HorizontalAlignment="Left" Name="dataGrid1" VerticalAlignment="Top"
Width="449" SelectedCellsChanged="dataGrid1_SelectedCellsChanged">
<DataGrid.Columns >
<DataGridTextColumn Header="ID" Binding="{Binding Path=Fi_id}"/>
<DataGridTextColumn Header="公司名稱" Binding="{Binding Path=Fs_pCompanyName}"/>
<DataGridTextColumn Binding="{Binding Path=Fs_phone}" Header="電話" />
<DataGridTextColumn Binding="{Binding Path=Fs_email}" Header="Email"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>

⑹ WPF的DataGrid自動綁定資料庫時最後的空列到底要怎麼消除

將AutoGenerateColumns設置為false。然後在代碼中手動生成不同表相對應的百分比列寬的與資料庫表的列名對應的列。其餘部分不變即可。

代碼:

string attr = "";
dataDataGrid.AutoGenerateColumns = false;

MultiSecurity ms = new MultiSecurity();
OracleConnection oraCon = ms.CreateConnection("msdb", "maple", "manager");

foreach (string att in ms.getAttributes(tablename, oraCon)) //獲取指定表的所有列
{
attr += att + ",";
dataDataGrid.Columns.Add(new DataGridTextColumn() { Header = att, Binding = new Binding(att), Width = new DataGridLength(2, DataGridLengthUnitType.Star) }); //為DataGrid生成百分比列寬的列,相當於xaml中設置Width = "2*"
}

attr = attr.Substring(0, attr.Length - 1);
sql = "select "+attr+" from " + node.Name; //生成查詢指定列的sql語句
DataTable dt = ms.getData(sql, oraCon);
dataDataGrid.ItemsSource = dt.DefaultView; //將結果集綁定到DataGrid