在使用TableAdapter作Query時發生
[解法]
原因為有些資料欄位Query出來後為null值
但是該欄位在dbDataSet的屬性AllowDBNull為False
因此把該欄位(或乾脆把全部欄位屬性AllowDBNull改為True
似乎不只這個問題會有這個警告訊息出現,其他況狀可看一下參考網址
參考網址
2015年1月28日 星期三
2015年1月15日 星期四
[C#] WinForm Report (.rdlc) with multiple datasources(Bean)
參考資料來源 How to create Microsoft Report (.rdlc) with multiple datasources in ASP.NET.
- 建立在專案中加入UserBean.cs 寫完後記得先對Project compiler
class UserBean
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
private string sex;
public string Sex
{
get { return sex; }
set { sex = value; }
}
public UserBean()
{
}
public UserBean(string name, int age, string sex)
{
this.name = name;
this.age = age;
this.sex = sex;
}
} - 在WinForm裡放入一ReportViewer
- 在ReportViewer選擇設計新報表
- 資料來原選擇物件
- 勾選UserBean > 完成
- 在WinForm Loading寫入
List<UserBean> userBeanList1 = new List<UserBean>();
List<UserBean> userBeanList1 = new List<UserBean>();
userBeanList1.Add(new UserBean("Bob", 30, "M"));
userBeanList2.Add(new UserBean("Alice", 25 ,"F"));
reportViewer1.LocalReport.DataSources.Clear();
ReportDataSource rd1 = new ReportDataSource("user1", userBeanList1);
ReportDataSource rd2 = new ReportDataSource("user2", userBeanList2);
reportViewer1.LocalReport.DataSources.Add(rd1);
reportViewer1.LocalReport.DataSources.Add(rd2);
this.reportViewer1.RefreshReport(); - 在rdlc中修改(加入)資料集(DataSet)名稱
- 結果
2015年1月9日 星期五
[C#] dataGridView當掉問題
以下是靠著在學時學的C#功能寫winForm的結果
就是所謂的鳥蛋教學
但至少可以解決問題啦(抓頭
dataGridView當掉的圖如下

多麼好笑的圖
我遇到的掉當原因為
我在winForm裡是使用Thread
當Thread抓取到某個值後需修改dataGridView (addRows)
但是控制dataGridView的其實是winForm的UI Thread
通常這樣寫會出現下列Exception
類型 'System.InvalidOperationException' 的未處理例外狀況發生於 System.Windows.Forms.dll
其他資訊: 跨執行緒作業無效: 存取控制項 'dataGridView1' 時所使用的執行緒與建立控制項的執行緒不同。
如果你說沒有發生 (σ ゚∀ ゚)σ 快來去看看你的Form Load是否多加了一行
Form.CheckForIllegalCrossThreadCalls = false;
雖然加上了會省了很多問題(忽略跨執行緒的問題)
但也讓我抓這個 dataGridView當掉問題抓了很久
因為一點Exception都沒有
就直接叉叉呈現
這時候我們只好踏實點寫了
把它委派(delegate)
先宣告類別變數
// 委派DataGridView使用
private delegate void GridViewAddRows(String str);
後面帶的參數請依需求更改類別 但是一次好像只能丟一個值
接下來寫方法,想對dataGridView addRows時呼叫
大概的意思好像是如果需要委派,就把它委派(this.Invoke(addRows, str))
若已委派,就執行你要它幹嘛就幹嘛(喂
private void InvokeGridViewAddRows(String str)
{
if (this.InvokeRequired)
{
GridViewAddRows addRows = new GridViewAddRows((InvokeGridViewAddRows));
this.Invoke(addRows, str);
}
else
{
// 在這裡寫入原本取到str後要對dataGridView做的事
}
}
總之還是請大家多多Google再寫(冒汗
以上
就是所謂的鳥蛋教學
但至少可以解決問題啦(抓頭
dataGridView當掉的圖如下
多麼好笑的圖
我遇到的掉當原因為
我在winForm裡是使用Thread
當Thread抓取到某個值後需修改dataGridView (addRows)
但是控制dataGridView的其實是winForm的UI Thread
通常這樣寫會出現下列Exception
類型 'System.InvalidOperationException' 的未處理例外狀況發生於 System.Windows.Forms.dll
其他資訊: 跨執行緒作業無效: 存取控制項 'dataGridView1' 時所使用的執行緒與建立控制項的執行緒不同。
如果你說沒有發生 (σ ゚∀ ゚)σ 快來去看看你的Form Load是否多加了一行
Form.CheckForIllegalCrossThreadCalls = false;
雖然加上了會省了很多問題(忽略跨執行緒的問題)
但也讓我抓這個 dataGridView當掉問題抓了很久
因為一點Exception都沒有
就直接叉叉呈現
這時候我們只好踏實點寫了
把它委派(delegate)
先宣告類別變數
// 委派DataGridView使用
private delegate void GridViewAddRows(String str);
後面帶的參數請依需求更改類別 但是一次好像只能丟一個值
接下來寫方法,想對dataGridView addRows時呼叫
大概的意思好像是如果需要委派,就把它委派(this.Invoke(addRows, str))
若已委派,就執行你要它幹嘛就幹嘛(喂
private void InvokeGridViewAddRows(String str)
{
if (this.InvokeRequired)
{
GridViewAddRows addRows = new GridViewAddRows((InvokeGridViewAddRows));
this.Invoke(addRows, str);
}
else
{
// 在這裡寫入原本取到str後要對dataGridView做的事
}
}
總之還是請大家多多Google再寫(冒汗
以上
訂閱:
文章 (Atom)