TextBox 校验问题

笑虾 2009-11-26 04:31:47
绑定了数据的 TextBox 进行校验。


this.商品信息BindingSource.DataMember = "商品信息";
this.商品信息BindingSource.DataSource = this.myDataSet;
//文本框的绑定代码:
this.货物编号TextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.商品信息BindingSource, "货物编号", true));

“商品信息”是myDataSet中的一个表,myDataSet是强类型数据集。

我想遍历此表中的字段,判断 AllowDBNll 如果为 False ,将文框背景色,改成红色。

如何实现?
谢谢
...全文
171 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
笑虾 2009-11-29
  • 打赏
  • 举报
回复
zxl198313
谢谢,这两天在忙 生成Excel单据方面的问题。
也没空测试。 还是谢谢了。先结贴,有问题再开新贴请教 。
谢谢
zxqiangwhere 2009-11-27
  • 打赏
  • 举报
回复
DataTable dt=this.myDataSet.Tables["商品信息"]
foreach(DataColumn dc in dt.Columns)
{
if(!dc.AllowDBNull)
{
this.货物编号TextBox.BackColor=Color.Red;
}
tb.BackColor = Color.red;
}
tianliang1 2009-11-27
  • 打赏
  • 举报
回复
路过
zxl198313 2009-11-27
  • 打赏
  • 举报
回复
//下面匹配改变颜色代码
//是根据绑定控件(TextBox)的绑定字段分别去在dt中找绑定数据源的字段,找到后再判断该字段是否为空,如果不为空,则通过ct去引用TextBox,并设置其背景色
foreach(Control ct in this.Controls)
{
TextBox tb = (TextBox)ct;
if (tb is TextBox)
{
foreach(DataColumn dc in dtBale.Columns)
{
if (!dc.AllowDBNull && dc.ColumnName == tb.DataBindings[0].BindingMemberInfo.BindingMember)
{
tb.BackColor = Color.Green;
}
}
}

}
zxl198313 2009-11-27
  • 打赏
  • 举报
回复
//我测试过了这样可以的。我的代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

BindingSource bsBule = new BindingSource(this.components);

DataTable dtBale = new DataTable("Bale");

//Id
DataColumn dcBaleId = new DataColumn();
dcBaleId.ColumnName = "BaleId";
dcBaleId.AllowDBNull = false;
dtBale.Columns.Add(dcBaleId);

//No
DataColumn dcBaleNo = new DataColumn();
dcBaleNo.ColumnName = "BaleNo";
dcBaleNo.AllowDBNull = false;
dtBale.Columns.Add(dcBaleNo);

//Name
DataColumn dcBaleName = new DataColumn();
dcBaleName.ColumnName = "BaleName";
dcBaleName.AllowDBNull = false;
dtBale.Columns.Add(dcBaleName);

//备注
DataColumn dcBaleMemo = new DataColumn();
dcBaleMemo.ColumnName = "BaleMemo";
dcBaleMemo.AllowDBNull = true;
dtBale.Columns.Add(dcBaleMemo);

bsBule.DataMember = "Bale";
bsBule.DataSource = dtBale;


DataRow dr = dtBale.NewRow();
dr["BaleId"] = 1;
dr["BaleNo"] ="001";
dr["BaleName"] = "zhangsan";
dr["BaleMemo"] = "";
dtBale.Rows.Add(dr);
textBox1.DataBindings.Add(new Binding("Text", bsBule.DataSource, "BaleId", true));
textBox2.DataBindings.Add(new Binding("Text", bsBule.DataSource, "BaleNo", true));
textBox3.DataBindings.Add(new Binding("Text", bsBule.DataSource, "BaleName", true));
textBox4.DataBindings.Add(new Binding("Text", bsBule.DataSource, "BaleMemo", true));

foreach(Control ct in this.Controls)
{
TextBox tb = (TextBox)ct;
if (tb is TextBox)
{
foreach(DataColumn dc in dtBale.Columns)
{
if (!dc.AllowDBNull && dc.ColumnName == tb.DataBindings[0].BindingMemberInfo.BindingMember)
{
tb.BackColor = Color.Green;
}
}
}

}
}
}
}
笑虾 2009-11-26
  • 打赏
  • 举报
回复
那一圈跑下来。 还是按最后一个字段来设置的啊。

foreach(Control tb in this.splitContainer2.Panel1.Controls)
{
if (tb is TextBox)
{
//可以通过tb引用到"AllowDBNull"不?遍历表字段没意义。
//如果可以这样前判断就OK了,如果不能,做校验时不是要一个一个去看DataTable中字段的属性?
if(!tb.DataBindings.AllowDBNull)
{
tb.BackColor=Color.Red;
}
}
}
zxl198313 2009-11-26
  • 打赏
  • 举报
回复
DataTable dt=this.myDataSet.Tables["商品信息"]
foreach(DataColumn dc in dt.Columns)
{
if(!dc.AllowDBNull)
{

foreach(Control ct in this.form.Controls)
{
TextBox tb=(TextBox)ct;
if(dc.ColumnName==tb.DataBindings[0].PropertyName)
{
tb.BackColor=Color.Red;
}
}
}

}

//思路是这样的,没测试 ,你试试应该能做到
zxl198313 2009-11-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jx520 的回复:]
这个实现的是什么?

TextBox 和 DataColumn  怎么对应的?

我现在窗体中有10个 TextBox  它们与 商品信息 中的十个字段分别绑定。

我想用一个函数实现:文本框对应的字段为必填时,将文框设置为红色。

楼上的代码只是把文本框按最后一个字段来设置了吧
[/Quote]
不是,是当有字段为空时,this.货物编号TextBox就变色
笑虾 2009-11-26
  • 打赏
  • 举报
回复
这个实现的是什么?

TextBox 和 DataColumn 怎么对应的?

我现在窗体中有10个 TextBox 它们与 商品信息 中的十个字段分别绑定。

我想用一个函数实现:文本框对应的字段为必填时,将文框设置为红色。

楼上的代码只是把文本框按最后一个字段来设置了吧
lhm741cs 2009-11-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zxl198313 的回复:]
DataTable dt=this.myDataSet.Tables["商品信息"]
foreach(DataColumn dc in dt.Columns)
{
    if(!dc.AllowDBNull)
    {
        this.货物编号TextBox.BackColor=Color.Red;
      }
}
[/Quote]
同意楼上的
zxl198313 2009-11-26
  • 打赏
  • 举报
回复
DataTable dt=this.myDataSet.Tables["商品信息"]
foreach(DataColumn dc in dt.Columns)
{
if(!dc.AllowDBNull)
{
this.货物编号TextBox.BackColor=Color.Red;
}
}
笑虾 2009-11-26
  • 打赏
  • 举报
回复
哥哥,晕~~~~~~~
我是想问

怎么通过 TextBox引用它数据源的 AllowDBNll 属性。

Sugar_Tiger 2009-11-26
  • 打赏
  • 举报
回复

if(!AllowDBNll)
{
this.textBox1.BackColor=Color.Red;
}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧