ASP.Net รบกวนถามเกี่ยวกับการผุกข้อมูลกับฟิลด Checkbox หน่อยครับ
แปลงมาเป็น checkbox เต็มตัวแล้ว ใช้ text มันก็ไปโผล่ข้างหลังกล่องนะซิครับ เปลี่ยนจาก text เป็น checked ครับ
Code (ASP)
<asp:TemplateField HeaderText="Permissionadmin">
<ItemTemplate>
<asp:CheckBox ID="c1" runat="server" OnCheckedChanged = "c1_selected" AutoPostBack="true" Checked='<%# Eval("Permissionadmin") %>' />
</ItemTemplate>
</asp:TemplateField>
Date :
2014-05-13 19:37:35
By :
gunnermontana
เคยลองแล้วครับแต่มันฟ้องว่า Object reference not set to an instance of an object. พอดี DB ผมใช้ SQL server2005 import เข้ามาเป็นไฟลเก็บไว้ในโปรเจคแล้วใช้ LINQ ดึง DB เอาครับ
Date :
2014-05-13 20:24:20
By :
ninjasand
Object reference not set to an instance of an object. แบบนี้คือไม่มี object หรือไม่มี instance แปลว่าอ้างคำสั่งผิด
เท่าที่อ่านในฐานข้อมูลมีค่าเป็น True, False (บางที่จะพบเป็น 0, 1)
คือว่าที่มัน error ว่าหา object ไม่เจอ ก็ไม่ต้องตกใจไป อันนี้มาถูกทางแล้ว เพียงแต่ผิดที่การ casting ครับ ให้ทำการ cast ค่าก่อน ถึงจะผ่านครับดังนี้
Code (ASP)
<asp:CheckBox ID="c1" runat="server" OnCheckedChanged = "c1_selected" AutoPostBack="true"
Checked='<%# ฺbool.Parse(Eval("Permissionadmin").ToString()) %>' />
ถ้าบางฐานข้อมูลเก็บค่าเป็น 0, 1 เวลาเอาขึ้นมาแสดงจะได้เป็น string "0", "1" กรณีนี้ให้เขียนเป็นรูปแบบล่างแทน
Code (ASP)
<asp:CheckBox ID="c1" runat="server" OnCheckedChanged = "c1_selected" AutoPostBack="true"
Checked='<%# ฺEval("Permissionadmin").ToString().Equals("1") %>' />
Date :
2014-05-14 00:12:04
By :
gunnermontana
ลองแล้วครับ ยังฟ้องเหมือนเดิมครับ ฟิลด Permissionadmin ผมมันเก็บค่าเป็น True , Flase รู้สึกว่าค่ามันจะเป็น Boolean อยู่แล้วผมลองสังเกตุที่ datatype ตอนมันแปลงเป็น Class Object ใน LINQ มันเป็น boolean อยู่แล้วครับ สงสัยจังทำไมมันยังฟ้องแบบนี้อีก
Date :
2014-05-14 12:12:01
By :
ninjasand
ผมว่ามันก็อยู่ที่การ casting นะครับ ลองรัน code ต่อ LINQ ก็ยังไม่เห็นปัญหาเลย
1. ทดสอบสร้างฐานข้อมูล
ค่าในฐานข้อมูล
2. ทดสอบสร้าง Project WebApplication1
2.1 ใส่ appSetting ที่ web.config เป็นค่า connectionString
Code (ASP)
<appSettings>
<!-- เปลี่ยนเป็นฐานข้อมูลอื่นนะครับ -->
<add key="constr" value="Data Source=(local);Initial Catalog=TestDB;User ID=sa;Password=pass1234"/>
</appSettings>
2.2 ทดสอบสร้าง LINQ หลังจากนั่นดึงตารางเข้ามาดังภาพ
3. หน้า Default.aspx เขียนโปแรกรม
Code (ASP)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table id="tblGrid" runat="server">
<tr>
<td><asp:Label ID="lblID" runat="server" Visible="false"></asp:Label>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="ServiceTypeID" HeaderText="ServiceTypeID" />
<asp:TemplateField HeaderText="InUsed 1">
<ItemTemplate>
<asp:CheckBox ID="c1" runat="server" AutoPostBack="true" Checked='<%# Convert.ToBoolean(Eval("InUsed")) %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="InUsed 2">
<ItemTemplate>
<asp:CheckBox ID="c2" runat="server" AutoPostBack="true" Checked='<%# Eval("InUsed") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="InUsed 3">
<ItemTemplate>
<asp:CheckBox ID="c3" runat="server" AutoPostBack="true" Checked='<%# bool.Parse(Eval("InUsed").ToString()) %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
4. Code Behind
Code (C#)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewData();
}
}
private void ViewData()
{
DataClasses1DataContext db = new DataClasses1DataContext();
db.Connection.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["constr"];
// อ่านค่ามาจากไฟล์ context
var serviceType =
from c in db.tblServiceTypes
select c;
GridView1.DataSource = serviceType;
GridView1.DataBind();
}
}
}
แล้วรันโปรแกรม ได้ผลดังนี้
ประวัติการแก้ไข 2014-05-14 20:57:41
Date :
2014-05-14 20:52:40
By :
gunnermontana
ได้แล้วครับขอบคุณมากครับ แต่แปลกใจอยู่ทำไม VS2008 ของผม มันใช้่ได้แต่โค้ดนี้ Checked='<%# Convert.ToBoolean(Eval("InUsed")) %>'
อีกสองบรรทัดใช้ไม่ได้ซะงั้น Checked='<%# Eval("InUsed") %>' กับ Checked='<%# bool.Parse(Eval("InUsed").ToString()) %>
สงสัยจะเป็นที่ Ver. visual studio ของผมเองกระมัง
Date :
2014-05-26 10:43:10
By :
ninjasand
Load balance : Server 04