基本问题

icefireren 2005-08-01 02:56:30
1.关于DataGrid
1)我把DataGrid与一个dataview做好数据绑定,DataGrid能显示出数据,没问题。但我想在DataGrid里再另外显示几个自定义的列,比如最前面一列加上checkbox,最后面一列也加上checkbox,该如何做?
2)找了好久,没找到这么一个属性,如何设置让DataGrid单击的时候选中整行,而不是某个单元格
3)如果以上功能难实现,能否推荐一个DataGrid的下载网址?要适用于MDI程序的

2.关于DataView
1)我得到了一个DataView,我该如何实现基于该DataView的新增、删除、修改数据操作?用程序实现。能否给个简单例子?这些操作需要能把数据返回到数据库中。
2)如果不能用DataView实现,那也能不能给个例子。

谢谢各位,如果分不够我可以另开贴加分!
...全文
191 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
baya 2005-08-02
  • 打赏
  • 举报
回复
在绑定事件中加入这样的代码可以实现鼠标鼠标到某行上显示你指定的颜色
e.Item.Attributes.Add("onmouseover", "this.oldcolor=this.style.backgroundColor;this.style.backgroundColor='#C217FF'");
e.Item.Attributes.Add("onmouseout", "this.style.backgroundColor=this.oldcolor");
baya 2005-08-02
  • 打赏
  • 举报
回复
这是datagrid绑定的用法,包括模板列等。其中datafield是我从数据库中取出的字段名。

<asp:datagrid id="dgData" runat="server" datakeyfield="pid"> <Columns> <asp:BoundColumn datafield="pid" visible="False"></asp:BoundColumn> <asp:BoundColumn datafield="name" visible="False"></asp:BoundColumn> <asp:BoundColumn datafield="url" visible="False"></asp:BoundColumn> <asp:BoundColumn datafield="thumbnail" visible="False"></asp:BoundColumn> <asp:TemplateColumn headertext="name"> <ItemTemplate> <asp:HyperLink id="link" width="120px" runat="server" target="_self"> <asp:Label id="linktext" width="120px" runat="server"></asp:Label> </asp:HyperLink> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn headertext="name" itemstyle-horizontalalign="Center"> <ItemTemplate> <asp:Literal id="litHtml" runat="server"></asp:Literal> </ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>

pageload事件
dgData.DataSource = ds;
dgData.DataBind();

databind事件
private void itemDataBound(object sender, DataGridItemEventArgs e)
{
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
Label linktext = (Label)e.Item.FindControl("linktext");
linktext.Style.Add("cursor", "hand");
linktext.Text = e.Item.Cells[1].Text;
linktext.ToolTip = ResourceManager.GetString("SOFTWARE_DOWNLOAD");
string linkwhere = "";
linkwhere = "download.aspx?type=1&pid=" + e.Item.Cells[0].Text + "&linkurl=" + Server.UrlEncode(e.Item.Cells[2].Text.Trim());
HyperLink link = (HyperLink) e.Item.FindControl("link");
link.NavigateUrl = linkwhere;


Literal litHtml = (Literal)e.Item.FindControl("litHtml");
StringBuilder strbHtml = new StringBuilder();
strbHtml.Append("<a title='");
strbHtml.Append(ResourceManager.GetString("SOFTWARE_DOWNLOAD"));
strbHtml.Append("' href=\"download.aspx?type=1&pid=");
strbHtml.Append(e.Item.Cells[0].Text);
strbHtml.Append("&linkurl=");
strbHtml.Append(Server.UrlEncode(e.Item.Cells[2].Text.Trim()));
strbHtml.Append("\"><img src=\"");
string strPicPath = e.Item.Cells[3].Text.Trim();
if (strPicPath == "" || strPicPath == " ")
strbHtml.Append("../library/images/download.gif\" border=0></a>");
else
{
strbHtml.Append(strPicPath);
strbHtml.Append("\" border=0></a>");
}
litHtml.Text = strbHtml.ToString();

int nSize = -1;
try
{
nSize = int.Parse(e.Item.Cells[6].Text);
}
catch
{
nSize = -1;
}
if (nSize == -1)
e.Item.Cells[6].Text = ResourceManager.GetString("UNKOWN_SIZE");
else
{
e.Item.Cells[6].Text = OmsConvert.ToSize(nSize);
}
}
}

icefireren 2005-08-02
  • 打赏
  • 举报
回复
再次感谢。

关于手动的在DataTable里加上几个自定义列的方法我想过,但是如果我本来数据集是1w条,那是不是意味着要每行都自己来填充数据?具体我待会试试

关于模板,不知道steelmqb1(小N)能不能详细解释一下,不懂!

silverseven7() 这种号称开源但收费的控件就最好不要拿过来了,有做广告之嫌。但还是谢谢回复

关于我的第二个问题好像没人愿意回答,我自己试了一下,如果用DbCommandBuilder绑定Adapter,然后Adapter.update是可以实现的。不知道有没有其他更好的方法?

期待.............
silverseven7 2005-08-02
  • 打赏
  • 举报
回复
http://www.softreg.com.cn/shareware_view.asp?id=/438FC1F9-931B-4027-83DD-FA11525080E8/
tslkfyh 2005-08-02
  • 打赏
  • 举报
回复
steelmqb1(小N)说个具体的方法,winform中的DataGrid怎么用模板列?
beyond1680 2005-08-02
  • 打赏
  • 举报
回复
给你个好网址:www.codeproject.com
虽然全是英文,但有很多了的资料,对你以后搞开发很有用.
steelmqb1 2005-08-02
  • 打赏
  • 举报
回复
用模板列显示chkbox
steelmqb1 2005-08-02
  • 打赏
  • 举报
回复
用模板列显示chkbox
tslkfyh 2005-08-02
  • 打赏
  • 举报
回复
果然是WINFORM的,问题就比较难些了,第一个问题,在前面加一个CHECKBOX简单,在后面再加一个不会啊,关注中
lyb_abiandbel 2005-08-02
  • 打赏
  • 举报
回复
增加2列,这2列是不对应数据库字段,那这两列数据重那里来?

你还是把数据整理一下放到DataSet的DataTable中吧.

MappingName就设成你DataTable中的列名啊!

其实,上面的MappingName就是绑定数据库的DS中的DataTable的列名,而不是数据库中的字段名,
只不过是因为DataTable的列名和数据库的列名通常写成一样的,所以才觉得是数据库中的字段,其实应该是数据源的字段。
icefireren 2005-08-02
  • 打赏
  • 举报
回复
我试过,可以自己增加几列来搞定在后面加列。

但还没找到好方法在前面加列,Table没有insertcolumn方法。各位有什么好办法?

另外DataGrid太难用了,去除复选还要写code,郁闷。推荐几个好的Grid吧
拿棵草 2005-08-02
  • 打赏
  • 举报
回复
1W条数据,不用你自己每一行设置值啊.你给这一列设置一个DEFAULTVALUE不就行了?
icefireren 2005-08-02
  • 打赏
  • 举报
回复
:)楼上给的例子很规范的,但我要的是winform
icefireren 2005-08-01
  • 打赏
  • 举报
回复
不好意思,是我的问题。谢谢楼上各位的回答。尤其是lyb_abiandbel(渴望成为高手) ,这么详细

但是。。。。我要做的是针对Winform。是我没说清楚

另外lyb_abiandbel(渴望成为高手) ,我可能没说清楚,我是要在数据绑定的列之外再增加2列,这2列是不对应数据库字段的,这时候我的MappingName该设成什么?

关于第二个问题,好像只有 athossmth(athos) 提到过,但我看过msdn,说增加行可以这样做
DataRowView drv = mydataview.AddNew();
drv["xxx"] = "xxx";
drv.EndEdit();我这样试过,没有报错,但结果也没写回数据库,是不是还要执行其他方法才能写回?

可能问题太简单,很少看到有人能列出比较详细的回答。

不管怎样,再次谢谢大家,分一定会给。呵呵,要这么多分我也没用

allanli 2005-08-01
  • 打赏
  • 举报
回复
免费使用,注册可以得到源代码

http://www.softreg.com.cn/shareware_view.asp?id=/438FC1F9-931B-4027-83DD-FA11525080E8/
JzeroBiao 2005-08-01
  • 打赏
  • 举报
回复
来晚了....
tslkfyh 2005-08-01
  • 打赏
  • 举报
回复
DataView可以转换成DATASET(相当于脱机数据库)他自带的可以和数据库保持同步
tslkfyh 2005-08-01
  • 打赏
  • 举报
回复
第一个:你可以直接增加一个模板列
第二个:DataGrid是没有这么一个属性的,最终生成的是一个TABLE,你可以用JAVASCRIPT来实现单击某格时让这一行的颜色发生变化(意思就是模拟)
停住(你的问题不是B/S中的DataGrid?是WINFORM中的?):
如果是WINFORM,那我就关注一下,帮顶
要是B/S中的,那么我建议用Repeater上面的问题很好解决

lyb_abiandbel 2005-08-01
  • 打赏
  • 举报
回复
回答DataGrid的第一问:


用列样式columnstyle

#region 角色信息Datagrid样式
private void dgColumnStyle_Role(bool editFlag)
{
//声明DataGridTableStyle
DataGridTableStyle myTableStyle = new DataGridTableStyle( );
myTableStyle.MappingName = "XT_QX_JS_TB";

//声明DataGridColumnStyle1
DataGridTextBoxColumn ColumnStyle1 = new DataGridTextBoxColumn();
ColumnStyle1.MappingName = "QX_JS_BM";
ColumnStyle1.HeaderText = "编号";
ColumnStyle1.Width = 0;
ColumnStyle1.ReadOnly = true;
ColumnStyle1.Format= "yyyy年MM月dd日";//这列如果是日期类型可以用指定日期格式显示日期值。
myTableStyle.GridColumnStyles.Add(ColumnStyle1);

//声明DataGridColumnStyle2
DataGridTextBoxColumn ColumnStyle2 = new DataGridTextBoxColumn();
ColumnStyle2.MappingName = "QX_JS_MC";
ColumnStyle2.HeaderText = "名称";
ColumnStyle2.Width = 120;
ColumnStyle2.NullText="";
myTableStyle.GridColumnStyles.Add(ColumnStyle2);

//声明DataGridColumnStyle3
DataGridTextBoxColumn ColumnStyle3 = new DataGridTextBoxColumn();
ColumnStyle3.MappingName = "QX_JS_MS";
ColumnStyle3.HeaderText = "描述";
ColumnStyle3.Width = 120;
ColumnStyle3.NullText="";
myTableStyle.GridColumnStyles.Add(ColumnStyle3);

//声明DataGridColumnStyle5
DataGridBoolColumn ColumnStyle5 = new DataGridBoolColumn();
ColumnStyle5.MappingName = "QX_JS_SFYX";
ColumnStyle5.HeaderText = "有效";
ColumnStyle5.AllowNull = false;
ColumnStyle5.TrueValue = (Decimal)1;
ColumnStyle5.FalseValue = (Decimal)0;
ColumnStyle5.Width = 40;
myTableStyle.GridColumnStyles.Add(ColumnStyle5);

//声明DataGridColumnStyle4
DataGridTextBoxColumn ColumnStyle4 = new DataGridTextBoxColumn();
ColumnStyle4.MappingName = "QX_JS_XSSX";
ColumnStyle4.HeaderText = "顺序";
ColumnStyle4.Width = 40;
myTableStyle.GridColumnStyles.Add(ColumnStyle4);

dataGridMain.TableStyles.Clear();
dataGridMain.TableStyles.Add( myTableStyle );
}
#endregion


为绑定该数据库的datagrid指定dataGridTableStyle(点击TableStyles属性右边的按纽),设置dataGridTableStyle的MappingName为你的表名,然后再添加GridCloumnStyle(也是点击GridCloumnStyles右边的按纽)设置GridCloumnStyle为表中的列名,想要哪个显示就添加哪个,不要显示就不添加即可!

MappingName一定要指定,不然没有效果!
athossmth 2005-08-01
  • 打赏
  • 举报
回复
datagrid的东西参考:www.datagridgirl.com
dataview的话,可以先找到datarowview,再更新field
加载更多回复(2)

110,561

社区成员

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

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

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