国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

C#中使用Spread6.0全攻略

2024-07-21 02:19:52
字體:
供稿:網(wǎng)友
(一)在c#中加載spread6.0

nmd002版《c#加載spread6.0全攻略》

首先,在引用里加載spread6.0的dll文件。
(如果你先安了c#,再安的spread有可能不用加載,是自動引用的。)
其次,在控件箱里選擇一個準(zhǔn)備放置spread控件的選項(xiàng)卡,
在里面點(diǎn)擊右鍵,選擇"添加/移除項(xiàng)",如果你的機(jī)器不夠快,請先上廁所。
然后,在對話框的"com組件"里找
"farpoint spread 6.0",
"farpoint spread 6.0 (oledb)",
"farpoint spread preview 6.0",
"farpoint spread preview 6.0 (oledb)",
這四個選項(xiàng)打鉤鉤。
最后,點(diǎn)確定。
這樣,在你的控件箱的當(dāng)前選項(xiàng)卡里就會出現(xiàn)spread的四個控件,
其他用法一如在vb里的使用。

最后,我要強(qiáng)調(diào)的是,spread6.0本身雖然兼容c#,但是并不是為c#而設(shè)計(jì)的,
雖然在c#中能夠使用,但是卻要幾經(jīng)變換,諸多彎路,并不比在vb下開發(fā)容易,
反而顯得更格格不入和困難。除非客戶強(qiáng)烈要求,不然還是不要在c#下用它了!

=====================================
上面的內(nèi)容和下面的內(nèi)容都是本人在c#的form應(yīng)用里寫過的,web應(yīng)用沒試過。
請根據(jù)需要自行選用,另外請?jiān)趧e處轉(zhuǎn)帖時,保留作者nmd002的署名,謝謝!
=====================================


(二)在c#中使用spread6.0

nmd002版《c#使用spread6.0全攻略》

有些人會說,在c#里用spread有什么了不起,不是跟vb里用一樣簡單嗎?

能說這種話的人一般會有兩種情況:
一種人從沒做過,想當(dāng)然地說;另一種人做過很多,必然這么說。

沒錯,原理是一樣的,根本沒有出入。但是實(shí)際做起來,就是兩回事了。

“c#中使用spread的最大問題不是spread的使用方法有所改變,
而是全新類型的結(jié)果集(dataset)的數(shù)據(jù)如何在spread中顯示出來。”

真正用spread做過項(xiàng)目的人都知道,spread主要不是用來綁定數(shù)據(jù),
而是用來顯示和接收數(shù)據(jù)的,因?yàn)閿?shù)據(jù)的輸入大部分都需要校驗(yàn),
而綁定是一種在校驗(yàn)時缺乏靈活性的手段,不利于數(shù)據(jù)的安全。

那么c#中的結(jié)果集和vb里的結(jié)果集有什么不同呢?
c#里的結(jié)果集是以xml的形式保存在對象中的,
而vb的結(jié)果集則是以數(shù)組的形式保存在對象中的。

<newdataset>
<authors>
<au_id>172-32-1176</au_id>
<au_lname>white</au_lname>
<au_fname>johnson</au_fname>
<phone>408 496-7223</phone>
<address>10932 bigge rd.</address>
<city>menlo park</city>
<state>ca</state>
<zip>94025</zip>
<contract>true</contract>
</authors>
<authors>
<au_id>213-46-8915</au_id>
<au_lname>green</au_lname>
<au_fname>marjorie</au_fname>
<phone>415 986-7020</phone>
<address>309 63rd st. #411</address>
<city>oakland</city>
<state>ca</state>
<zip>94618</zip>
<contract>true</contract>
</authors>
......
<authors1>
<column1>23</column1>
</authors1>
</newdataset>

這就是將某個dataset中的內(nèi)容轉(zhuǎn)換后顯示出來的實(shí)例字串,其中凡是<authors>標(biāo)簽的就是這個結(jié)果集中第一個表的記錄內(nèi)容,而<authors1>標(biāo)簽內(nèi)的內(nèi)容就是這個結(jié)果集中另外一個表的記錄內(nèi)容。
由此可見,dataset的內(nèi)容是保存在一個以<newdataset>標(biāo)簽定義的xml字串中的。
不同的表用不同的名稱作標(biāo)簽來區(qū)別,每個表的每條記錄都以各自的字段名為標(biāo)簽,標(biāo)識自己的字段值。
所以,如果你想做到:把指定表中的值讀出來,寫入spread的單元格中,只要學(xué)會在dataset中取出指定表的全部記錄,并將值寫入對應(yīng)單元格即可。

本人實(shí)踐后成功的方法有二:
1、雙循環(huán)直接從dataset中取值填入對應(yīng)的spread單元格。

axvaspread1.maxrows = rs.tables[tablename].rows.count;
axvaspread1.maxcols = rs.tables[tablename].columns.count;
axvaspread1.row=1;
axvaspread1.col=1;
axvaspread1.row2=axvaspread1.maxrows;
axvaspread1.col2=axvaspread1.maxcols;

int i,j;
for(i=1;i<=rs.tables[tablename].rows.count;i++)
{
  for(j=1;j<=rs.tables[tablename].columns.count;j++)
    {
      axvaspread1.row=i;
      axvaspread1.col=j;
      axvaspread1.value =rs.tables[tablename].rows[i-1][j-1].tostring();
}
}
//本例中rs為dataset對象,axvaspread1為vaspread對象實(shí)例。
//tablename為指定表名。

2、通過取得dataset的xml字串,并將其轉(zhuǎn)化為一張二維表(用“水平制表符”區(qū)分字段,用“換行符”區(qū)分記錄的大字串),將其作為vb的結(jié)果集在剪貼板中的考貝內(nèi)容,直接寫入spread對象。

axvaspread1.maxrows = rs.tables[tablename].rows.count;
axvaspread1.maxcols = rs.tables[tablename].columns.count;
axvaspread1.row=1;
axvaspread1.col=1;
axvaspread1.row2=axvaspread1.maxrows;
axvaspread1.col2=axvaspread1.maxcols;

string xmlstr=rs.getxml().tostring();
string steatstr="//</" + tablename + "//>";
//生成一個記錄節(jié)點(diǎn)的替換串"/</authors/>"
//使用正則表達(dá)式轉(zhuǎn)換xml為axvaspread1.clip可接受格式的字串
xmlstr=regex.replace(xmlstr, @"[/n/r/v/t]*", "");
//去掉串中所有的空格以外的無用空白符:回車,換行,水平制表符,垂直制表符。有多少去多少
xmlstr=regex.replace(xmlstr, @"/<(|/)newdataset/>", "");
//去掉dataset所生成xml串的:固定的起始標(biāo)簽<newdataset>和固定的結(jié)束標(biāo)簽</newdataset>
xmlstr=regex.replace(xmlstr, @"/<([^/]*)/>", "");
//去掉xml串的全部起始標(biāo)簽:<newdataset>,<au_id>,<city>,<authors>.....
xmlstr=regex.replace(xmlstr, @steatstr, "/r");
//將指定表記錄的結(jié)束標(biāo)簽換成換行符:</authors> => /r
xmlstr=regex.replace(xmlstr, @"/</[/w]*/>", "/t");
//將其它內(nèi)容的結(jié)束標(biāo)簽換成水平制表符:</au_id> => /t
axvaspread1.clip=xmlstr;//數(shù)據(jù)內(nèi)容置入spread對象

//regex是個正則對象,其它同上。

其實(shí)根據(jù)上面的思想,還有其它方法可尋,比如自定一個類,存儲結(jié)構(gòu)完全等同于vb的結(jié)果集存儲結(jié)構(gòu),再寫個方法專門置入和取出,只要你對recordset了解的夠多,完全沒有問題。
或者通過其他方法,只要實(shí)現(xiàn)了dataset和recordset的內(nèi)容轉(zhuǎn)換,想怎么實(shí)現(xiàn)都行。
畢竟抓住老鼠就是好貓嘛!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 元江| 平武县| 梅河口市| 彭阳县| 和顺县| 沈阳市| 尼玛县| 大悟县| 南昌县| 沅陵县| 班玛县| 祥云县| 三原县| 额济纳旗| 且末县| 海淀区| 繁昌县| 固镇县| 五家渠市| 共和县| 思茅市| 烟台市| 泽库县| 太仓市| 砚山县| 静海县| 周口市| 柏乡县| 波密县| 德阳市| 盐亭县| 淮阳县| 延寿县| 白银市| 景东| 临桂县| 阳曲县| 荔浦县| 嵩明县| 靖远县| 正定县|