找回密码
 立即注册

QQ登录

只需一步,快速开始

michael

银牌会员

22

主题

57

帖子

3974

积分

银牌会员

积分
3974

活字格认证

michael
银牌会员   /  发表于:2011-11-11 21:26  /   查看:8252  /  回复:16
我用的spread4.0版本 在页面中有一个table里面套了一个spread 把spread的某个单元格设置成数值doublecelltype,并且设置了错误提示信息。
但是当我把spread那列靠右对齐的时候错误提示信息还是在屏幕左边 这是怎么回事啊 请教高手了
页面代码如下:
<table width="100%">
    <tr>
        <td align="right">
            <FarPoint:FpSpread ID="FpSpread1" runat="server" BorderColor="Black"
                BorderStyle="Solid" BorderWidth="1px" Height="200" Width="500">
                <sheets>
                    <FarPoint:SheetView SheetName="Sheet1">
                    </FarPoint:SheetView>
                </sheets>
            </FarPoint:FpSpread>
        </td>
    </tr>
    </table>
后台代码如下:
     DataTable dt = new DataTable();

        dt.Columns.Add("列1");
        dt.Columns.Add("列2");
        dt.Columns.Add("列3");
        dt.Columns.Add("列4");

        DataRow dr = dt.NewRow();
        dr["列1"] = 11.000;
        dr["列2"] = 2;
        dr["列3"] = 3;

        dt.Rows.Add(dr);
        this.FpSpread1.Sheets[0].DataAutoCellTypes = false;

        FpSpread1.DataSource = dt;
        FpSpread1.DataBind();

        FpSpread1.ActiveSheetView.ColumnHeader.RowCount = 2;

        DoubleCellType db = new DoubleCellType();
        db.DecimalDigits = 3;
        db.FixedPoint = true;
        db.ErrorMessage = "err message";

        FpSpread1.ActiveSheetView.Cells[0, 0].CellType = db;
        FpSpread1.ActiveSheetView.Cells[0, 1].CellType = db;
        FpSpread1.ActiveSheetView.Cells[0, 2].CellType = db;
        FpSpread1.ActiveSheetView.Cells[0, 3].CellType = db;

16 个回复

正序浏览
iceman
社区贡献组   /  发表于:2011-11-22 13:49:00
17#

回复 16# michael 的帖子

如果我们查看 DataTable dt 就会发现,在 Spread 绑定 dt 之前,dt 中 dr[&quot;列2&quot;] 值已经由 “0001” 转化成 “1” 了,所以 Spread 绑定 dt 后,单元格的 text 为 “1”。
回复 使用道具 举报
michael
银牌会员   /  发表于:2011-11-22 13:34:00
16#

回复 15# iceman 的帖子

为什么我这输入0001,点按钮后取得的是1
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-11-22 10:36:00
15#

回复 14# michael 的帖子

你好,下面段代码在 “列4” 中输入 “0001” 成功存入 SQL 数据库 Test 表中,字段类型为 nvarchar(50):
注意:
1. 在进行数据存储时,应该指定存储数据类型为 ,DbType.String。
2. dr[&quot;列2&quot;] = &quot;0001&quot;;如果不以双引号形式赋值 value 将为 “1”。无法进行转化。存储方式见“ FpSpread1_UpdateCommand”。

  1.     protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             DataTable dt = new DataTable();

  4.             dt.Columns.Add(&quot;列1&quot;);
  5.             dt.Columns.Add(&quot;列2&quot;);
  6.             dt.Columns.Add(&quot;列3&quot;);
  7.             dt.Columns.Add(&quot;列4&quot;);

  8.             DataRow dr = dt.NewRow();
  9.             dr[&quot;列1&quot;] = 11.000;
  10.             dr[&quot;列2&quot;] = &quot;0001&quot;;
  11.             dr[&quot;列3&quot;] = 3;

  12.             dt.Rows.Add(dr);
  13.             this.FpSpread1.ActiveSheetView.DataAutoCellTypes = false;
  14.             FpSpread1.DataSource = dt;
  15.             FpSpread1.DataBind();

  16.             FpSpread1.ActiveSheetView.ColumnHeader.RowCount = 2;

  17.             DoubleCellType db = new DoubleCellType();
  18.             db.DecimalDigits = 3;
  19.             db.FixedPoint = true;
  20.             db.ErrorMessage = &quot;err message&quot;;

  21.             TextCellType tc = new TextCellType();
  22.             tc.AllowWrap = true;

  23.             FpSpread1.ActiveSheetView.Cells[0, 0].CellType = db;
  24.             FpSpread1.ActiveSheetView.Cells[0, 1].CellType = tc;
  25.             FpSpread1.ActiveSheetView.Cells[0, 2].CellType = db;
  26.             FpSpread1.ActiveSheetView.Cells[0, 3].CellType = tc;

  27.         }

  28.         protected void FpSpread1_UpdateCommand(object sender, SpreadCommandEventArgs e)
  29.         {
  30.             SqlDataSource1.InsertCommandType = SqlDataSourceCommandType.Text;
  31.             SqlDataSource1.InsertCommand = &quot;INSERT INTO [test]([test]) VALUES(@insertpara)&quot;;
  32.             SqlDataSource1.InsertParameters.Add(new Parameter(&quot;insertpara&quot;,DbType.String,e.EditValues[3].ToString()));
  33.             SqlDataSource1.Insert();
  34.         }
复制代码
回复 使用道具 举报
michael
银牌会员   /  发表于:2011-11-21 22:02:00
14#
不好意思 我问题描述错了 非常抱歉
现在问题是我在单元格上输入了0001 但是FpSpread1.ActiveSheetView.Cells[0, 1].Text;获取的值却是1
现在我想把输入的值存入DB中 DB对应的字段不是数值类型的 所以不能进行数值格式化处理 代码如下
首先在单元格输入0001 但后点击按钮把输入的值赋给文本框 输出的是1

  1.         DataTable dt = new DataTable();

  2.         dt.Columns.Add(&quot;列1&quot;);
  3.         dt.Columns.Add(&quot;列2&quot;);
  4.         dt.Columns.Add(&quot;列3&quot;);
  5.         dt.Columns.Add(&quot;列4&quot;);

  6.         DataRow dr = dt.NewRow();
  7.         dr[&quot;列1&quot;] = 11.000;
  8.         dr[&quot;列2&quot;] = 0001;
  9.         dr[&quot;列3&quot;] = 3;

  10.         dt.Rows.Add(dr);
  11.         this.FpSpread1.ActiveSheetView.DataAutoCellTypes = false;
  12.         FpSpread1.DataSource = dt;
  13.         FpSpread1.DataBind();

  14.         FpSpread1.ActiveSheetView.ColumnHeader.RowCount = 2;

  15.         DoubleCellType db = new DoubleCellType();
  16.         db.DecimalDigits = 3;
  17.         db.FixedPoint = true;
  18.         db.ErrorMessage = &quot;err message&quot;;

  19.         TextCellType tc = new TextCellType();
  20.         tc.AllowWrap = true;

  21.         FpSpread1.ActiveSheetView.Cells[0, 0].CellType = db;
  22.         FpSpread1.ActiveSheetView.Cells[0, 1].CellType = tc;
  23.         FpSpread1.ActiveSheetView.Cells[0, 2].CellType = db;
  24.         FpSpread1.ActiveSheetView.Cells[0, 3].CellType = db;

  25.     protected void Button1_Click(object sender, EventArgs e)
  26.     {
  27.         this.txtTest.Text = FpSpread1.ActiveSheetView.Cells[0, 1].Text;
  28.     }
复制代码
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-11-21 16:27:00
13#
你好,不好意思,目前没有重现你的问题。
1.请问你使用 8# 的数据结合 9# 的方法问题得到解决了吗?这是我做的 Demo ,请你参考:
2627.zip (2.77 MB, 下载次数: 146)
回复 使用道具 举报
michael
银牌会员   /  发表于:2011-11-21 12:30:00
12#
在spread上输入0001用cells.value取得的是1
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-11-21 09:53:00
11#

回复 10# michael 的帖子

你好,请问你的 DataTable 从数据库中取出后,nvarchar2 字段存储的数值是 &quot;0001&quot; 形式还是 “1”形式呢?
回复 使用道具 举报
michael
银牌会员   /  发表于:2011-11-18 19:33:00
10#
可是这样也有问题啊 因为我的Datatable是从数据库中取的 DB中的字段是nvarchar2类型的 在数据库中存的是0001 但是取出来绑定到spread上就变成1了
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-11-18 10:52:00
9#

回复 8# michael 的帖子

你好,感谢你的代码片段。
有两种解决办法:
1.修改
  1. dr[&quot;列2&quot;] = 0001;
复制代码
  1. dr[&quot;列2&quot;] = “0001”;
复制代码
2.自定义单元格类型,继承 TextCellType 类型,重载 format 方法,代码如下:
  1.     public class MyCellType : FarPoint.Web.Spread.TextCellType
  2.     {
  3.         public override string Format(object obj)
  4.         {
  5.             string _test = obj.ToString();
  6.             _test = &quot;000&quot; + _test;
  7.             return base.Format(_test);
  8.         }
  9.     }
复制代码
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部