菜鸟问题,如何在已查询出结果的Datatable里,动态增加一列名称为ID,且数据为自动增加?
同上。 问题点数:20、回复次数:7Top
1 楼frankiex(frankiex)回复于 2003-09-03 11:56:17 得分 0
upTop
2 楼whccx(铁兵)回复于 2003-09-03 13:39:11 得分 0
Dim MyConnection As SqlConnection
Sub Page_Load(Sender As Object, E As EventArgs)
MyConnection = New SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes")
If Not (IsPostBack)
BindGrid()
End If
End Sub
Sub AddAuthor_Click(Sender As Object, E As EventArgs)
Dim DS As DataSet
Dim MyCommand As SqlCommand
If au_id.Value = "" Or au_fname.Value = "" Or au_lname.Value = "" Or phone.Value = ""
Message.InnerHtml = "错误:""作者 ID""、""姓名""或""电话""不允许使用空值"
Message.Style("color") = "red"
BindGrid()
End If
Dim InsertCmd As String = "insert into Authors (au_id, au_lname, au_fname, phone, address, city, state, zip, contract) values (@Id, @LName, @FName, @Phone, @Address, @City, @State, @Zip, @Contract)"
MyCommand = New SqlCommand(InsertCmd, MyConnection)
MyCommand.Parameters.Add(New SqlParameter("@Id", SqlDbType.NVarChar, 11))
MyCommand.Parameters("@Id").Value = au_id.Value
MyCommand.Parameters.Add(New SqlParameter("@LName", SqlDbType.NVarChar, 40))
MyCommand.Parameters("@LName").Value = au_lname.Value
MyCommand.Parameters.Add(New SqlParameter("@FName", SqlDbType.NVarChar, 20))
MyCommand.Parameters("@FName").Value = au_fname.Value
MyCommand.Parameters.Add(New SqlParameter("@Phone", SqlDbType.NChar, 12))
MyCommand.Parameters("@Phone").Value = phone.Value
MyCommand.Parameters.Add(New SqlParameter("@Address", SqlDbType.NVarChar, 40))
MyCommand.Parameters("@Address").Value = address.Value
MyCommand.Parameters.Add(New SqlParameter("@City", SqlDbType.NVarChar, 20))
MyCommand.Parameters("@City").Value = city.Value
MyCommand.Parameters.Add(New SqlParameter("@State", SqlDbType.NChar, 2))
MyCommand.Parameters("@State").Value = stateabbr.Value
MyCommand.Parameters.Add(New SqlParameter("@Zip", SqlDbType.NChar, 5))
MyCommand.Parameters("@Zip").Value = zip.Value
MyCommand.Parameters.Add(New SqlParameter("@Contract", SqlDbType.NVarChar,1))
MyCommand.Parameters("@Contract").Value = contract.Value
MyCommand.Connection.Open()
Try
MyCommand.ExecuteNonQuery()
Message.InnerHtml = "<b>已添加记录</b><br>" & InsertCmd.ToString()
Catch Exp As SQLException
If Exp.Number = 2627
Message.InnerHtml = "错误:已存在具有相同主键的记录"
Else
Message.InnerHtml = "错误:未能添加记录,请确保正确填写了字段"
End If
Message.Style("color") = "red"
End Try
MyCommand.Connection.Close()
BindGrid()
End Sub
Sub BindGrid()
Dim MyCommand As SqlDataAdapter = new SqlDataAdapter("select * from Authors", MyConnection)
Dim DS As DataSet = new DataSet()
MyCommand.Fill(DS, "Authors")
MyDataGrid.DataSource=DS.Tables("Authors").DefaultView
MyDataGrid.DataBind()
End Sub
Top
3 楼frankiex(frankiex)回复于 2003-09-03 13:55:39 得分 0
什么东东?不是啊。Top
4 楼frankiex(frankiex)回复于 2003-09-03 14:09:46 得分 0
upTop
5 楼basil(绿茶112)回复于 2003-09-03 15:01:58 得分 0
直接增列是不行的,可以考虑再建一个datatable,然后把原来的datatable赋值过来,就可以了
code:
---------
原来的datatable:dt
---------
DataTable dt=new DataTable("test");
DataColumn dc=new DataColumn();
dc=dt.Columns.Add("a",typeof(string));
dc=dt.Columns.Add("b",typeof(string));
DataRow dr;
dr=dt.NewRow();
dr["a"]="you";
dr["b"]="welcome";
dt.Rows.Add(dr);
dr=dt.NewRow();
dr["a"]="me";
dr["b"]="hello";
dt.Rows.Add(dr);
---------------
新建datatable:dt1
---------------
DataTable dt1=new DataTable("test1");
dc=dt1.Columns.Add("c",typeof(Int32));
dc.AutoIncrement=true;
dc.AutoIncrementSeed=1;
dc.AutoIncrementStep=1;
dc=dt1.Columns.Add("a",typeof(string));
dc=dt1.Columns.Add("b",typeof(string));
int i=0;
foreach(DataRow dr1 in dt.Rows)
{
dt1.Rows.Add(dt1.NewRow());
dt1.Rows[i]["a"]=dr1["a"].ToString();
dt1.Rows[i]["b"]=dr1["b"];
i++;
}Top
6 楼hgknight(江雨.net)回复于 2003-09-03 15:09:26 得分 20
不用这么麻烦,加一个模板列就行
<asp:TemplateColumn HeaderText="序列">
<ItemTemplate>
<%# Container.ItemIndex+1%>
</ItemTemplate>
</asp:TemplateColumn>Top
7 楼frankiex(frankiex)回复于 2003-09-03 22:25:52 得分 0
THANK UTop




