Office中国论坛/Access中国论坛

标题: 【教程】从Access到Asp.net(九) [打印本页]

作者: 情比金坚    时间: 2006-8-15 09:16
标题: 【教程】从Access到Asp.net(九)
从Access到Asp.net(九)
        昨天关于datagrid的设置,还有一些项目,比如关于数据格式的设置等等,怎样才能令其出现货币格式呢?
       .NET Framework 定义了标准和自定义格式说明符,用于格式化数字、日期和时间以及枚举。各种格式化输出字符串的方法,以及一些分析输入字符串的方法都使用格式化说明符。
C 或 c 货币 数字转换为表示货币金额的字符串。
D 或 d 十进制 只有整型才支持此格式。
E 或 e
G 或 g 常规  
N 或 n 数字  
P 或 p 百分比  
R 或 r 往返过程
格式放在一对大括号里,所有格式项都采用下面的形式。
{index[,alignment][:formatString]}
格式项由下面的组件构成。
索引组件
       强制“索引”组件(也叫参数说明符)是一个从 0 开始的数字,可标识值列表中对应的元素。也就是说,参数说明符为 0 的格式项格式化列表中的第一个值,参数说明符为 1 的格式项格式化列表中的第二个值,依次类推。
通过指定相同的参数说明符,多个格式项可以引用值列表中的同一个元素。例如,通过指定类似于“{0:X} {0:E} {0:N}”的源字符串,可以将同一个数值格式化为十六进制、科学表示法和数字格式。
每一个格式项都可以引用所有的参数。例如,如果有三个值,则可以通过指定类似于“{1} {0} {2}”的源字符串来格式化第二、第一和第三个值。格式项未引用的值会被忽略。如果参数说明符指定了超出值列表范围的项,将导致运行时异常。
对齐组件
       可选的“对齐”组件是一个带符号的整数,指示首选的格式化字段宽度。如果“对齐”值小于格式化字符串的长度,“对齐”会被忽略,并且使用格式化字符串的长度作为字段宽度。如果“对齐”为正数,字段的格式化数据为右对齐;如果“对齐”为负数,字段的格式化数据为左对齐。如果需要填充,则使用空白。如果指定“对齐”,就需要使用逗号。
格式字符串组件
       可选的“格式字符串”组件由标准或自定义格式说明符组成。如果不指定“格式字符串”,则使用常规(“G”)格式说明符。如果指定“格式说明符”,需要使用冒号。
【datalgrid的编辑格式】
        通过昨天的练习,网友们应该察觉到,在datagrid的编辑状态下,其格式会和普通状态下有较大区别,这时你也许希望自定义设计编辑状态下的datagrid。Datagrid的属性生成器里有一个“将此列变成模版列”的按钮,点击以后,在控件右键的菜单里面有一个”编辑模版”命令,点击后可以进入模版编辑状态。不单可以设计编辑状态下的datagrid,也可以设计正常状态下的datagrid,我就是把商品信息表格里的“备注”字段换成了textbox,不然无法实现多行显示。[attach]19768[/attach]
[attach]19769[/attach]
[attach]19770[/attach]


[此贴子已经被作者于2006-8-15 1:19:43编辑过]


作者: 情比金坚    时间: 2006-8-15 09:21
【DropDownList】
     昨天内容不多,大家应该自己又尝试设计一些吧,根据我们的access小样,在商品信息添加窗体里,关于商品类别的,我们需使用下拉框来选择,那在.net里面怎样对下拉框添加数据呢?关于下拉框在哪里,我就不用说了吧?
同样,我们的下拉框数据是通过ado.net动态添加的:
'获得商品类别信息
    Sub dropdownlist_add()
        Dim mysql As String
        mysql = "select pkinds from tab_pkinds order by id"
        mycon.Open()
        Dim mycmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(mysql, mycon)
        Dim myrs As OleDb.OleDbDataReader
        myrs = mycmd.ExecuteReader
        DropDownList1.Items.Clear()
        Do While myrs.Read
            DropDownList1.Items.Add(myrs("pkinds"))
        Loop
        myrs.Close()
        mycon.Close()
End Sub
作者: 情比金坚    时间: 2006-8-15 09:23
【图片的添加】


[attach]19771[/attach]
我们在access上图片用的是链接,数据库只是储存链接地址,这个相对简单,直接指定地址就对了。可是现在图片是储存于别的电脑上的啊,所以要先把图片上传给服务器,然后返回地址。
那么我们用于打开本地对话框的办法是啥呢?access里我们有函数,也有控件(office2003以后),在asp.net我们用的是:file field他是一个html控件:
    '函数:上传商品图片信息,返回服务器中的图片路径
    Function upimg(ByVal file As Object) As String
        Dim s1 As String   '图片的格式
        Dim s2() As String   '原图片的地址,用"\"分割为数组
        Dim s3 As String   '上传后图片的名称,以年月日时分秒来命名
        If file.PostedFile.ContentLength > 0 Then
            s2 = file.PostedFile.FileName.Split("\")
            s1 = Right(s2(s2.Length - 1), 4)
            If s1 = ".jpg" Or s1 = ".JPG" Or s1 = ".GIF" Or s1 = ".gif" Then
                s3 = Format(Now(), "yyyyMMddHHmmss") + s1
                file.PostedFile.SaveAs(Server.MapPath(".") + "\images\" + s3)
                upimg = "images\" + s3
            End If
        Else
            upimg = ""
        End If
    End Function[attach]19772[/attach]


最后把商品信息添加到数据库里去:
    '添加按钮的事件
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim imgstr, spname, spkind, sprice, slprice, spcount, spmsg As String
        If upimg(file1) = "" Then
            imgstr = "\images\noimges.jpg"
        Else
            imgstr = upimg(file1)
        End If
        spname = TextBox1.Text
        spkind = DropDownList1.SelectedValue
        sprice = TextBox2.Text
        slprice = TextBox3.Text
        spcount = TextBox4.Text
        spmsg = TextBox6.Text
        Dim mysql As String
        mysql = "INSERT INTO tab_pinfo(pname,pkinds,price,lprice,pcount,pimg,pmsg) VALUES ('" _
        & spname & "','" & spkind & "'," & sprice & "," & slprice & "," & spcount & ",'" & imgstr & "','" & spmsg & "')"
        mycon.Open()
        Dim mycmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(mysql, mycon)
        'Response.Write(mysql)     '显示sql字符串,看看写错没有
        '错误陷阱
        Try
            mycmd.ExecuteNonQuery()
            Response.Write("<script>alert('\n 添加成功 \n');</script")
        Catch ex As Exception
            mycon.Close()
            Response.Write(ex.Message)
        Finally
            mycon.Close()
        End Try
    End Sub






[此贴子已经被作者于2006-8-15 1:24:57编辑过]


作者: 情比金坚    时间: 2006-8-15 09:27
【编辑商品信息】
        和添加商品信息是一样的,只是把追加查询改为更新查询,这里我只是给出打开编辑商品信息的代码:他在一个新窗口里被打开:
Response.Write("<script language='javascript'>open('pinfo_edit.aspx?id=" & id & "','编辑','width=500,height=400,left=150,top=150,resizable=0,scrollbars=0,status=no,toolbar=no,location=no,menu=no')</" & "script>")
【datagrid的批量更改】
        又回到datagrid来了,没错,我说过datagrid是asp.net中最复杂的控件,我们在datagrid中添加一个复选框,被选中的就被更改:这个复选框是如何被添加进去的呢?前面已经说过了:就是用模版编辑功能:

    '修改订单状态事件
    Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
        Dim tate As String
        tate = DropDownList1.SelectedItem.Text
        Dim objch As CheckBox
        Dim item As DataGridItem
        For Each item In DataGrid1.Items
            objch = item.FindControl("checkbox1")
            If objch.Checked = True Then
                Dim mylist As String
                mylist = item.Cells(0).Text
                Dim mysql As String
                mysql = " UPDATE tab_salelist SET lstate='" & tate & "' where listid='" & mylist & "'"
                mycon.Open()
                Dim mycmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(mysql, mycon)
                mycmd.ExecuteNonQuery()
            End If
        Next
        Response.Write("<script>alert('\n 修改成功 \n');</script")
        BindGrid()
End Sub
【datagrid的筛选】
       筛选的实现我们在access里已经很明确了,就是更改数据源就行了,这里要说给大家听的是,在asp.net里面,储存一些公用变量要用的一些对象,这里我们用的是:viewstate
这个对象在本页面关闭以后就随之消失了:看看我的用法:
'筛选
    Private Sub DropDownList2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DropDownList2.SelectedIndexChanged
        Dim mytate As String
        mytate = DropDownList2.SelectedItem.Text
        If mytate = "全部" Then
            viewstate("sql") = "SELECT * FROM tab_salelist "
        Else
            viewstate("sql") = "SELECT * FROM tab_salelist  where lstate='" & mytate & "'"
        End If
        BindGrid()
    End Sub
【小结】
今天我们学习了:
在datagrid里显示货币的符号,以及格式表达式的相关知识
在datagrid里显示多行文本的办法,以及datagrid的模版编辑功能
在datagrid里实现筛选
在datagrid里实现批量更新
在新窗口中打开指定页面
浏览文本框的使用
添加图片的方法
Dropdownlist的数据加载方法
Asp.net中错误陷阱的写法

[此贴子已经被作者于2006-8-15 1:28:32编辑过]


作者: sgrshh29    时间: 2006-8-15 17:13
xie xie!
作者: xiaoxu83    时间: 2006-8-15 18:35
啊  看的不是很清楚

有没有整套教程
作者: yodong    时间: 2006-8-18 03:56
真的很好.
作者: wjb5645    时间: 2006-9-1 05:30
我跟着做个下拉框,可是不能加载数据,能帮我看看改改吗?

[attach]20104[/attach]

作者: 情比金坚    时间: 2006-9-1 11:17
但从一个页面分析不出来你的意图。下拉框的数据加载其实就是一个循环的过程。
作者: wjb5645    时间: 2006-9-3 07:04
哈哈,是我太菜不懂在事件中加:dropdownlist_add()

谢谢!
作者: wjb5645    时间: 2006-9-3 07:27
能否教教数据绑定的下拉框步骤?
作者: wjb5645    时间: 2006-9-3 08:51
请教:

添加按钮的事件中:upimg(file1)中的file1是file field控件吗?

可好象file field控件的ID更名无效呢.



作者: wjb5645    时间: 2006-9-5 07:09
顶上盼复
作者: 情比金坚    时间: 2006-9-5 08:20
以下是引用wjb5645在2006-9-3 0:51:00的发言:


请教:

添加按钮的事件中:upimg(file1)中的file1是file field控件吗?

可好象file field控件的ID更名无效呢.

file1就是file field控件,ID更名尽量在属性中更改
作者: wjb5645    时间: 2006-9-5 20:05
怪了,我的咋改不了


作者: wjb5645    时间: 2006-9-6 05:26
这么改还是错啊:

[attach]20172[/attach]
[attach]20173[/attach]


晕死了
作者: 情比金坚    时间: 2006-9-6 06:20
<INPUT id="file1" style="WIDTH: 264px; HEIGHT: 22px" type="file" size="24" runat="server">

需要声明它为服务器控件,右键-作为服务器控件运行,或者,在html中写:runat="server"
作者: yangzn    时间: 2006-10-25 22:35
【datalgrid的编辑格式】

我把
   种类的文本框的 编辑格式 变为多行的文本框后. 那个文本框,在更新时,的值怎成始终为 空字符串了.

我应该怎么引用这个文本框的更新值。

Private Sub DataGrid1_UpdateCommand(ByVal source As System.Object, _
                ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
                        Handles DataGrid1.UpdateCommand
        Dim mysql As String
        Dim mycmd As OleDb.OleDbCommand
        Dim myStr As String
        myStr = e.Item.Cells(0).Text
        Dim id As Integer = CInt(myStr)
        Dim txt As String = e.Item.Cells(1).Text   '编辑更新时. 这行怎么返回成 "" 了.

        mysql = "update tab_pkinds set tab_pkinds.pkinds='" & txt & "'" & _
              " where id=" & id
        Response.Write(txt)
        mycon.Open()
        mycmd = New OleDb.OleDbCommand(mysql, mycon)
        mycmd.ExecuteNonQuery()
        mycon.Close()
        DataGrid1.EditItemIndex = -1
        BindGrid()
    End Sub



[此贴子已经被作者于2006-10-25 14:37:16编辑过]


作者: johnx9    时间: 2006-11-23 04:46
完美的教程 啊!
作者: hotned    时间: 2009-12-13 20:05
级压群芳的无敌贴!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3