日期:2014-05-17  浏览次数:20472 次

GridView中如何加入DropDownList和CheckBox等控件的問題
GridView的設計是6列:
第一列為行號;
第二列為checkbox,用來表示選中當前行(可同時選擇多行);
第三至第六列爲從數據庫讀取的數據:
    第三列:只讀的TextBox;
    第四列:可編輯的TextBox;
    第五列:DropDownList(datasource另讀);
    第六列:只讀的TextBox。為數據庫中的2列數據拼合(yyyy/mm/dd hh:mm),在服務器端代碼中用了string的拼接,如果有更好的方法請賜教;
需求是進入畫面后,Grid中的非只讀控件都可直接操作
以下是客戶端的代碼
1、嘗試加了checkbox,可以顯示並購選,但還不清楚獲取選中狀態的用法;
2、嘗試加了DropDownList,綁定數據之前只能顯示成TextBox的樣子。而在服務器端綁定數據后,程序報錯
			<asp:GridView ID="GridView1" runat="server" Font-Size="Medium" BackColor="Gray" 
CellPadding="1" AllowSorting="True" 
onrowcreated="GridView1_RowDataBound" >
<Columns>
<asp:TemplateField HeaderText="">
<ItemTemplate>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="選択">
<ItemTemplate>
<input ID="Checkbox1" type="checkbox" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="端末№">
<ItemTemplate>
<asp:DropDownList id="dlTerNo" runat="Server" autopostback="true" >
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

以下是服務器端代碼:
1、在嘗試在GridView中加入控件之前,先做了從數據庫讀入並顯示,已成功。使用的是DataTable來創建Columns
public partial class Page1 : System.Web.UI.Page
{

int m_nDataRow = 0;
CTblDUADDINF m_dbData = new CTblDUADDINF();
STCDUADDINF[] m_aDuaddinf = null;
struct STCDUADDINF
{
public string strMacAddress;
public string strCompanyCode;
public int nTerminalNo;
public int nAccessYMD;
public short nAccessHM;
};
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = GetDataSource();
GridView1.DataBind();
}
}

protected bool ReadDUADDINF()// 打開表
{
string strSql = string.Format("select {0}, {1}, {2}, {3}, {4} From {5}", CTblDUADDINF.S_MacAddress, CTblDUADDINF.S_CompanyCode, CTblDUADDINF.S_TerminalNo, CTblDUADDINF.S_AccessYMD, CTblDUADDINF.S_AccessHM, CTblDUADDINF.S_Tbl_Name);
m_dbData.Open(strSql, out m_nDataRow);
if (m_nDataRow > 0)
{
return true;
}

return false;
}

private DataTable GetDataSource()// 獲取數據
{
int nCnt = 0;
DataTable dt = new DataTable();
if (!IsPostBack)
{
if (ReadDUADDINF())
{
m_aDuaddinf = null;
m_aDuaddinf = new STCDUADDINF[m_nDataRow];
for (nCnt = 0; nCnt < m_nDataRow; nCnt++)
{
m_aDuaddinf[nCnt].strMacAddress = m_dbData.m_data.Tables[0].Rows[nCnt]["MacAddress"].ToString().Trim();
m_aDuaddinf[nCnt].strCompanyCode = m_dbData.m_data.Tables[0].Rows[nCnt]["CompanyCode"].ToString();
m_aDuaddinf[nCnt].nTerminalNo = (short)m_dbData.m_data.Tables[0].Rows[nCnt]["TerminalNo"];
m_aDuaddinf[nCnt]